我需要模拟从私有方法返回的对象。我在我的项目中与junit和mockito合作。我不能在这里粘贴实际代码,但示例代码如下所示。这里的限制是代码是遗留的,我现在无法重构
要测试的类
public class TestService {
public String test() {
TestDao testDao = getDaoObject();
int num = testDao.getData();
if (num < 10) {
return "hey you loose";
} else {
return "hey you win";
}
}
private TestDao getDaoObject() {
return new TestDao();
}
}
道类
public class TestDao {
public int getData() {
return 5;
}
}
测试类别
public class JUnitServiceTestExample {
@Test
public void test() {
TestDao testDao = Mockito.mock(TestDao.class);
TestService test = new TestService();
when(testDao.getData()).thenReturn(20);
assertEquals(test.test(), "hey you win");
}
}
请帮帮忙
您可以稍微修改getDaoObject
从Private
到Package-Private
,如下所示:
TestDao getDaoObject() {
return new TestDao();
}
然后使用Mockito。spy(new TestService())来存根getDaoObject()
并返回模拟的testDao。
public class JUnitServiceTestExample {
@Test
public void test() {
TestDao testDao = Mockito.mock(TestDao.class);
TestService test = Mockito.spy(new TestService());
when(testDao.getData()).thenReturn(20);
doReturn(testDao).when(test).getDaoObject();
String result = test.test();
assertEquals("hey you win", result);
}
}
给你一个提示:assertEquals
的正确用法是assertEquals(预期的,实际的)
而不是assertEquals(实际的,预期的)
克拉斯托斯特。publicMethod-->classtotest.privateMethod(不是mocking)-->classtoinject.publicMethod1(想要mock) 类如下所示
如何模拟返回已强制转换的模拟对象的方法。 试验方法。
我试图编写一个测试来比较字符串的相等性。 下面是应该测试的类的代码片段 这是一个测试类 正如您所看到的,我想测试公共方法,它在同一个类中调用私有方法。这个想法是,我想为私有方法创建一个模拟对象,无论何时从公共方法调用它,它都应该返回常量值 但是它返回,而不是从私有方法返回。 null
我编写了一个类,它读取整个文件并返回内容。
我试图在测试的类中模拟一个私有方法,如下所示。 现在我需要测试方法和mock。 我尝试创建间谍的上述类,但该方法得到调用时,我这样做下面 在第二行本身被调用。而且,不会被模仿。 也许我用错误的方式创建了间谍对象?无法执行
我试图模拟一个私有方法(executeGetRequest),在我声明要为私有方法返回的模拟的那一行中,私有方法实际上是用null参数执行的,因此抛出了一个NullPointerException。 VlcPlayerMinimal。爪哇: VlcPlayerMinimalTest。爪哇: 堆栈跟踪: 它似乎PowerMockito实际上是调用的方法,我试图在行PowerMockito.do返回(