我有以下课程
package pckt.theclass;
public class TheClass {
public String name = "testing";
public void setTheName(){
this.name = getNamesFromDB();
}
public String getNamesFromDB(){
return "pablo";
}
}
这是它的测试类
package pckt.theclass;
import org.junit.*;
import org.mockito.Mockito;
public class TheClassTest {
@Test
public void testSetTheName() {
//TheClass tc = Mockito.mock(TheClass.class);
//Mockito.when(tc.getNamesFromDB()).thenReturn("dbName");
TheClass tc = new TheClass();
tc.setTheName();
System.out.println("Name: "+tc.name);
Assert.assertEquals("pablo", tc.name);
}
}
如果我按原样运行测试类,它就会通过。但是,如果我取消注释Mockito行并修改assertEquals以期望" dbName"测试失败,错误
expectend "dbName" but was <null>
问题是因为实例变量&#34; name&#34;由于某种原因没有填充,即使它已经在其声明中具有值。我是Mockito的新手,所以我不确定我是否需要为此工作做点什么。
思想?
答案 0 :(得分:1)
这是因为如果您将TheClass tc
实例声明为模拟,setTheName
的主体不再是您在TheClass
中定义的实体,而是一个存根方法返回null
。这是因为你没有训练&#34; setTheName
有任何行为。
有效地,模拟的实例看起来好像是这样声明的:
public class TheClass {
public String name = null;
public void setTheName(){
// do nothing
}
public String getNamesFromDB(){
return "dbName";
}
}
你犯了一个基本的Mockito错误:你正在嘲笑被测系统。