对于以下类,我想编写一个单元测试:
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);
}
}
首先,我将存储SomeClass调用Dependency的所有方法,以便单独测试我的类.
但我无法找到答案的问题是:
我应该检查SomeClass如何调用依赖关系的方法,例如什么参数传递等?
当然这是一个非常简单的例子,但我想知道这是否应该是一般单元测试的一部分.
编辑:在我的情况下依赖将是我不控制的第三方api库.所以我认为将参数传递给这些函数很重要但是我不确定这应该是单元测试的一部分.
最佳答案
我会说如果调用依赖项,那么你应该至少有一个测试用例来检查它是否被调用.如果你不想覆盖这种情况,这意味着(对我来说)你无论如何都不需要打电话.当你有任何条件语句如if / else / switch时,这非常重要.你能想象你错误地删除了这行代码
dep.doSomethingElse(processed);
在不检查依赖项是否被调用的情况下,您甚至不会注意到已将其删除.
测试看起来像:
import static org.fest.assertions.Assertions.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {
@Mock
private Dependency dependency;
@InjectMocks
private SomeClass someClass;
@Captor
private ArgumentCaptor