Mockito模拟与构造函数参数

时间:2018-04-18 19:36:45

标签: testing mockito

我正在使用mockito 1.9.5并且想要测试我在github上发布的类。

问题是我需要嘲笑getStringFromExternalSources方法。

MyClass code

public class MyClass {

    String a,b,c;

    public MyClass(String a, String b, String c) {

        this.a = a;
        this.b =  b;
        this.c = c;
    }

    public String  executeLogic (String d) {

        return a + b + c + d;
    }

    public String getStringFromExternalSources (){
        return "i got it from some place else";
    }

}

我的current test

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {


    @Test
    public void MyClassTest() {

        MyClass mc = Mockito.spy(new MyClass("a","b","c") );

        Mockito.doReturn("mock").when(mc.executeLogic("real"));

        Mockito.doReturn("externalString").when(mc.getStringFromExternalSources());

        System.out.println(mc.executeLogic("real"));

    }

}

任何指针?

2 个答案:

答案 0 :(得分:0)

如何模拟getStringFromExternalSources方法:

public class MyClassTest {

    @Test
    public void MyClassTest() {

        MyClass mc = mock(MyClass.class);
        when(mc.executeLogic("real").thenReturn("mock");
        when(mc.getStringFromExternalSources().thenReturn("externalString");

        System.out.println(mc.executeLogic("real"));
    }

}

答案 1 :(得分:0)

你可以使用when()。thenReturn()构造来模拟任何方法。

ON (... RowNumber = 1)

因此,只要为模拟对象 mc 调用方法' getStringFromExternalSource()' ,就会返回"我从那里得到了它!"

如果你想测试具有不同参数的类,那么你可以使用 @Parameters annotation 与Parameterized runner一起为类提供参数,并在公共静态方法中提及参数Example: MyClass mc = Mockito.spy(new MyClass("a","b","c")); when(mc.getStringFromExternalSource()).thenReturn("I got it from there!!"); 注释。一个粗略的例子是:

@Paramters