对于下面的类,我想写一个单元测试:
public class SomeClass {
private Dependency dependency;
public SomeClass(Dependency dep){
this.dependency = dep;
}
private String processString(String s){
/*
edit the string and return
*/
}
public void doSomething(String arg){
String processed = processString(arg);
dep.doSomethingElse(processed);
}
}
一开始,我会在Dependency
上存根所有SomeClass
调用的方法,以便隔离地测试我的类。但我还没找到答案的问题是:
我是否应该检查SomeClass
如何调用Dependency
的方法,例如:传递什么参数等。当然,这是一个非常简单的例子,但我想知道这是否应该是一般单元测试的一部分。
编辑:在我的情况下,Dependency
将是第三方API库,我不控制。所以我认为传递给这些函数的参数很重要,但是我不确定这是否应该是单元测试的一部分。
4条答案
按热度按时间kuuvgm7e1#
我会说,如果依赖被调用,那么你应该至少有一个测试用例来检查它是否被调用。如果你不想报道这个案子,那意味着(对我来说)你无论如何都不需要打电话。当你有任何条件语句,如if/else/switch时,这一点非常重要。你能想象你只是不小心删除了这行代码吗
如果不检查是否调用了依赖项,您甚至不会注意到您删除了它。
测试可以如下所示:
nmpmafwu2#
测试
Dependency
不应该是类SomeClass
的单元测试的一部分。不要测试Dependency
的方法调用的正确性和准确性。你可以检查传递给
Dependency
方法的参数值,如果这些值是SomeClass
类的本地值,即由SomeClass
创建和管理,否则执行正常的输入检查Assert。piv4azn73#
这真的取决于情况,并且是高度基于意见的。
我会说,如果对依赖项的调用只是帮助你的方法完成它的工作,那么就不要测试这个调用。只是测试你的方法是否完成了它的工作。
如果对依赖项的调用很重要,比如当对依赖项的调用是功能的重要部分,甚至是执行方法的全部原因时,您应该考虑测试依赖项是否被正确调用。
扪心自问:你真的关心依赖被调用,并且被正确地调用,还是你只关心你的方法在测试中完成了它的工作?
或者从另一个Angular 来看:依赖项只是你的类的一部分,还是你的类与之交互的一个独立对象?
我知道,这是相当模棱两可的,但我希望你得到的想法。
13z8s7eq4#
我想是的。你应该去抓阿格斯。我认为值得检查你与依赖项的交互,以及你是如何做到的。