加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 我应该测试什么都不会发生的情况

发布时间:2020-12-14 05:37:14 所属栏目:Java 来源:网络整理
导读:如果状态为S或P,则可以删除样本.我有以下测试: @Testpublic void canBeDeletedWhenStatusIsP() { Sample sample = new Sample(); sample.setState("P"); assertTrue(sample.canBeDeleted());}@Testpublic void canBeDeletedWhenStatusIsS() { Sample sample
如果状态为S或P,则可以删除样本.我有以下测试:
@Test
public void canBeDeletedWhenStatusIsP() {
    Sample sample = new Sample();
    sample.setState("P");
    assertTrue(sample.canBeDeleted());
}

@Test
public void canBeDeletedWhenStatusIsS() {
    Sample sample = new Sample();
    sample.setState("S");
    assertTrue(sample.canBeDeleted());
}

我应该进一步吗当样品不能被删除时,应该如何进行测试?例如:

@Test
public void cantBeDeletedWhenStatusINeitherPNorS() {
    Sample sample = new Sample();
    sample.setState("Z");
    assertFalse(sample.canBeDeleted());
}

这个测试有用吗测试命名呢?这个逻辑是否足够测试?

解决方法

SaintThread给你一个很好的“直接”答案.

但是让我们退后一步.因为您的生产代码中出现错误.很可能,您的生产代码在该字符串上执行类似于开关的表示样本状态的操作.而不仅仅是一次,而是在它提供的所有方法中.而且…这不是一个很好的OO设计!

相反,您应该使用多态,如:

abstract class Sample {
  boolean canBeDeleted();
// ... probably other methods as well

与各种具体的子类,如

class ZSample extends Sample {
  @Override canBeDeleted() { return false; }
// ...

最后,你有

class SampleFactory {
  Sample createSampleFrom(String stateIdentifier) {
  // here you might switch over that string and return a corresponding object,for example of class ZSample

然后,你的测试归结为:

>测试工厂;输入“Z”的例子,它返回一个ZSample的实例
>测试您的所有子类的Sample;例如对于ZSample的实例,canBeDeleted()返回false

关键是:你的代码做FSM(有限状态机)的工作.那么不要在整个地方使用if / elses;相反,做OO的事情:创建一个明确的状态机.而且,免费红利:这种方法也可以将您的Sample对象变成不可变的东西;这通常比处理可以随时间改变其状态的对象更好(例如,不可变性帮助许多线程问题).

免责声明:如果您的“样本”类仅仅是一种方法,或许以上是过度的.但是在任何其他情况下…也许退后一步,看看我的建议是否会为您的设计增添价值!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读