[英]Using Mockito to mock a class method inside another class
我正在尝试使用Mockito / JUnit为这样的函数编写单元测试:
class1 {
method {
object1 = class2.method // method that I want to fake the return value
// some code that I still want to run
}
}
在Mockito中是否有任何方法来存根class2.method的结果? 我正在尝试改进class1的代码覆盖率,所以我需要调用它真正的生产方法。
我在其间谍方法中查看了Mockito API,但这会覆盖整个方法而不是我想要的部分。
我想我理解你的问题。 让我重新说一下,你有一个函数,你试图测试并想要模拟在该函数内调用的函数的结果,但是在另一个类中。 我已经按照以下方式处理了这个问题。
public MyUnitTest {
private static final MyClass2 class2 = mock(MyClass2.class);
@Begin
public void setupTests() {
when(class2.get(1000)).thenReturn(new User(1000, "John"));
when(class2.validateObject(anyObj()).thenReturn(true);
}
@Test
public void testFunctionCall() {
String out = myClass.functionCall();
assertThat(out).isEqualTo("Output");
}
}
这是在用@Before注释包装的函数中,我正在设置我希望class2中的函数如何响应给定的特定输入。 然后,从实际测试中,我只是调用我想要在我要测试的类中测试的函数。 在这种情况下,myClass.functionCall()正常运行并且您不会覆盖其任何方法,但您只是模拟它从MyClass2中的方法(或方法)获得的输出。
这为我工作:
public class Class1Test {
Class1 class1;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
class1 = new Class1();
}
@Test
public void testClass1Method() {
Class2 class2 = Mockito.mock(Class2.class);
class1.setClass2(class2);
Mockito.when(
class2.class2Method(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn("some response");
String actualResponse = class1
.class1Method("12345", "3333", "4444");
assertEquals("some response", actualResponse);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.