微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如果状态为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对象变成不可变的东西;这通常比处理可以随时间改变其状态的对象更好(例如,不可变性帮助许多线程问题).

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

原文地址:https://www.jb51.cc/java/121953.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐