Java Junit:如何通过Junit中的方法分配返回值
如何使用模拟对象测试此类: 类Myclass{Java Junit:如何通过Junit中的方法分配返回值,java,junit,Java,Junit,如何使用模拟对象测试此类: 类Myclass{ MyStudent mystudent=null; Mymethod mymethod= new Mymethod (); public void show(String data){ mystudent=mymethod.display(data); } } 这里mymethod.display()method返回mystudent的一个实例如果我没弄懂你的问题,你会想要一个
MyStudent mystudent=null;
Mymethod mymethod= new Mymethod ();
public void show(String data){
mystudent=mymethod.display(data);
}
}
这里
mymethod.display()
method返回mystudent
的一个实例如果我没弄懂你的问题,你会想要一个junit测试的例子,在一个简单的例子上使用模拟。
使用Junit4和junit测试如下所示:
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;
}
}
TestTest.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是否为非null
您需要像这样改进您的测试类:
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字段成为最终字段,因为唯一允许设置它的代码是您的构造函数。这样您就可以在测试类中注入Totest的任何实例。这是某种依赖项注入(这是一个如何将依赖项注入类的示例,但还有其他方法,您也可以使用一个简单的setter,我更喜欢将依赖项声明为final,因为我认为这更清楚)。
那么,为什么我在你的简单示例中使用DI呢?因为我需要在内部测试中注入一个Totest实例。我在单元测试中注入的实例只是一个模拟。测试用例的第一行定义了模拟实例在显示时的行为
我希望这会有一些意义。@测试行为。这里的行为是什么?如何为TestMethod编写测试我不明白这个问题:类测试是另一个类的junit测试吗?TestMethod是测试用例吗?在你的回答中,每个类/对象/方法中都有test这个词,所以很难帮助你:)该类应为..类测试{Mytest Mytest=null;Totest Totest=new Totest();公共void myMethod(字符串数据){Mytest=Totest.display(字符串数据);}