在 java 中模拟从私有方法返回的对象
Mocking an object returned from private method in java
我有一个要求,我想从私有方法中模拟一个 return 的对象。我在我的项目中使用 junit 和 mockito。我无法在此处粘贴实际代码,但示例代码如下所示。这里的限制是代码是遗留代码,我现在无法重构
Class 测试
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();
}
}
道Class
public class TestDao {
public int getData() {
return 5;
}
}
测试class
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()
和 return 你的模拟 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(expected, actual)
而不是 assertEquals(actual, expected)
我有一个要求,我想从私有方法中模拟一个 return 的对象。我在我的项目中使用 junit 和 mockito。我无法在此处粘贴实际代码,但示例代码如下所示。这里的限制是代码是遗留代码,我现在无法重构
Class 测试
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();
}
}
道Class
public class TestDao {
public int getData() {
return 5;
}
}
测试class
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()
和 return 你的模拟 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(expected, actual)
而不是 assertEquals(actual, expected)