假设我有以下场景:
public class ClassUnderTest()
{
private Service myService;
public SomeData method1(final InputData input) {
final SomeData result = method2(myservice.getOutput(input));
return result;
}
public SomeData method2(final OutputData output){
//Do something with the OutputData
}
}
现在我想测试method1()。由于它正在调用 method2() 我还需要确保 method2() 内的所有内容都正常工作。但问题是,由于我测试了所有方法,所以我会单独测试 method2() 。
那么我怎么知道只测试method1()而不考虑method2()。我很想在调用 method2() 时只使用 doNothing() ,但由于它是我想要测试而不是 mock 的类,所以我不能这样做。或者有没有可能?
2.) 当两个 ArrayList 都应该只有两个具有相同值的对象时,如何断言它们相等。例如:
@Test
public void test(){
User user1 = new User();
User user2 = new User();
user1.setMail("mail");
user2.setMail("mail");
list<User> list1 = new ArrayList<User>();
list<User> list2 = new ArrayList<User>();
list1.add(user1);
list2.add(user2);
assertEquals(list1,list2);
}
这会失败,因为它们不是相等的对象。
最佳答案
你真的应该分开问这些问题,但我尝试回答两个问题:
<强>1。使用 Mockito 进行部分模拟
我不太确定是否真的建议部分模拟。但使用mockito这是可能的。您可以模拟您的ClassUnderTest
并告诉mockito在调用method1
时执行真正的方法
ClassUnderTest mock = Mockito.mock(ClassUnderTest.class);
when(mock.method1()).thenCallRealMethod();
参见http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#partial_mocks
<强>2。对集合的断言
AssertJ 为您提供了关于集合的非常好的断言 - 例如:
List<String> list1 = Arrays.asList("1", "2", "3");
List<String> list2 = Arrays.asList("1", "2", "3");
then(list1).containsExactlyElementsOf(list2);
关于java - 在 ClassUnderTest 中模拟公共(public)方法调用 |处理 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543838/