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

前端之家收集整理的这篇文章主要介绍了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对象变成不可变的东西;这通常比处理可以随时间改变其状态的对象更好(例如,不可变性帮助许多线程问题).

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

猜你在找的Java相关文章