Java 如何从可测试类模拟调用方法?

Java 如何从可测试类模拟调用方法?,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我想问你一个问题 我应该如何正确地从可测试类调用的方法返回一些数据 例如,我有下一个结构: Class SomeClass { public void method1(){ //some logic here List<Object> howToReturnHereValues = gatData(); //some logic here } public List<Object> getData(){ re

我想问你一个问题

我应该如何正确地从可测试类调用的方法返回一些数据

例如,我有下一个结构:

Class SomeClass {
    public void method1(){
    //some logic here
    List<Object> howToReturnHereValues = gatData();
    //some logic here
    }
    public List<Object> getData(){

       return List<Object>;

    }
}
现在我想测试method1,但我不知道如何模拟调用返回List的getData


有什么建议吗?

您可以使用间谍来完成此操作,如下所述:

例如:

@Test
public void testMethod1() throws Exception {
    SomeClass someClass = new SomeClass();
    SomeClass spy = Mockito.spy(someClass);
    Mockito.when(spy.getData()).thenReturn(Arrays.asList("blaat", "blabla"));
    spy.method1();
}
这将返回一个blaat和blabla列表,可供method1中的逻辑使用

现在我想测试method1,但我不知道如何模拟调用 获取返回列表的数据

模拟正在测试的类的公共方法是一个相当糟糕的主意

单元测试应该测试行为和模拟依赖项。在这里,当您模拟被测试类的行为时,您只对行为的一部分进行单元测试

如果课程是我们的,您可以:

或者在不模拟名为public方法的getData的情况下测试此方法。 或者在另一个类中移动getData public方法,然后模拟这个新的依赖关系,如果您不想在调用它的每个测试方法中重复对getData方法的测试。
如果该类不可修改,并且确实需要调用mocked,则可以在测试对象上使用Mockito框架的spy方法来模拟特定方法的模拟行为。

从Mockito了解spy。这让你可以模仿真实对象的一些方法谢谢你的答案和例子谢谢你的建议