Java Junit:如何通过Junit中的方法分配返回值

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的一个实例如果我没弄懂你的问题,你会想要一个

如何使用模拟对象测试此类:

类Myclass{

     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(字符串数据);}