Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们是否应该检查单元测试中是否没有更改?_Java_Unit Testing - Fatal编程技术网

Java 我们是否应该检查单元测试中是否没有更改?

Java 我们是否应该检查单元测试中是否没有更改?,java,unit-testing,Java,Unit Testing,这个例子是定制来询问我的疑问的 Object Car { color:null tyre : 0; } fillCar(Object Car, boolean b) { if (b) { Car.color = "Red" } else { Car.tyre = 4; } } 现在我需要对我的代码进行单元测试 我的test1是(Car,true),test2是(Car,false) 我的问题: 在test1中我是否需要测试“轮

这个例子是定制来询问我的疑问的

Object Car {
  color:null
  tyre : 0;
}

fillCar(Object Car, boolean b) {
    if (b) {
        Car.color = "Red"
    } else {
        Car.tyre = 4;
    } 
}
现在我需要对我的代码进行单元测试

我的test1是(Car,true),test2是(Car,false)

我的问题:


在test1中我是否需要测试“轮胎==4”,在类似的行中我是否需要在test2中检查“color==null”

如果这是方法功能要求的一部分,则答案是肯定的

例如,如果您的规格说明当True时,tyre的值必须为4,而其他变量则无关紧要,则无需这样做。但是如果您的规格说明不仅轮胎必须是4,而且其他变量必须保持相同的值,那么您也应该检查一下


考虑到单元测试不仅有助于检查代码是否良好,而且有助于确保将来在编写代码时不会损坏预期的功能。

一般来说,测试代码的所有部分都没有坏处。事实上,我会鼓励的。这是一种非常简单的检查逻辑是否有错误的方法


在本例中,代码非常简单,可以看到结果。然而,如果扩展Car或添加更多功能,它可能会变得更加复杂。

关于这一点有很多争论,但一旦我专注于验证接口,单元测试就开始对我有意义了。在这种情况下,您有一个函数,它公开了一个接口,您可以在其中传入一个car对象和一个布尔值,然后根据布尔值对car对象进行某些修改。您完全正确地看到两个单元测试涵盖了这一点,就我个人而言,我就到此为止。如果你担心会出现空值,你可以在构建汽车对象的单元测试中涵盖它。如果您分配的不是可能为null的直接文本,那么对null的测试是有意义的

在测试驱动设计(TDD)的上下文中,还有一个技巧单元测试更适合我。但是我发现非TDD代码很难进行单元测试


最后,我发现学习TDD/单元测试非常值得。

这看起来不像Java。是Javascript吗?通常很难测试一个方法是否没有意外的副作用,因为可能的副作用是无限的。但如果它们可以在规范中列举,那么它们就可以在测试中进行测试。我们似乎同时回答了这个问题。我同意这一点。我倾向于在某种程度上不同意。过于热心、过度的测试(即测试其公共功能以外的测试)使代码难以重构,并且不能真正提供太多价值。例如,这就是为什么Mockito在
Mockito.verifyNoMoreInteractions()
等方法上给你大警告的原因。Mockito在关于过度指定测试的警告中提供了一个链接:。@MarkPeters是的,在经过良好测试的代码和灵活的代码之间显然存在一定程度的折衷。在这种情况下,它似乎是面向公众的,并且具有不明显的输出。