如何使用模拟对象测试此类:
我的班级{
MyStudent mystudent=null; Mymethod mymethod= new Mymethod (); public void show(String data){ mystudent=mymethod.display(data); } }
这里mymethod.display()
方法返回一个实例mystudent
如果我正确理解您的问题,您会想要一个在一个简单示例上使用模拟的 junit 测试示例。使用 Junit4 和mockito ,您的 junit 测试将如下所示:
测试测试.java
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;
import org.junit.Before;
public class TestTest {
private Test test;
private Totest totest;
@Before
public void setup(){
totest = mock(Totest.class);
test = new Test(totest);
}
@org.junit.Test
public void mytest_should_not_be_null_after_I_called_displayed(){
when(totest.display(anyString())).thenReturn(new Mytest());
test.myMethod("some data");
assertNotNull(test.getMytest());
}
}
setup方法使用@Before注释进行注释。它在此测试类的任何测试用例运行之前执行。测试用例用@Test注释。它只是在调用方法display后检查字段mytest是否为非空。
你需要像这样改进你的测试类:
class Test{
private Mytest mytest=null;
private final Totest totest;
public Test(Totest totest) {
this.totest = totest;
}
public void myMethod(String data){
mytest = totest.display(data);
}
public Mytest getMytest() {
return mytest;
}
}
您应该注意构造函数,它将 Totest 实例作为参数。此类的 totest 字段成为最终字段,因为唯一允许设置它的代码是您的构造函数。这样您就可以在 Test 类中注入任何 Totest 实例。这是某种依赖注入(如何将依赖注入到类中的示例,但还有其他方法可以做到这一点,您也可以使用简单的 setter,我只是更喜欢将我的依赖声明为 final,因为它在我看来更清楚)。那么为什么我在你的小例子中使用了 DI 呢?因为我需要在 Test 中注入一个 Totest 的实例。我在单元测试中注入的实例只是一个模拟。测试用例的第一行定义了调用显示时模拟实例的行为。
我希望它有一些意义。