处理假设我有以下情形:嘲笑ClassUnderTest |中的公共方法调用用的ArrayList
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
}
}
现在我想测试方法1()。由于它调用method2()我也需要保证method2()内的所有东西都正常工作。但事情是,因为我测试了所有的方法,我会单独测试method2()。
那么我怎么知道只测试method1()而不考虑method2()。我很想在method2()被调用时使用doNothing(),但因为它是我想测试的类而不是模拟的,所以我不能这样做。或者有可能吗?
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);
}
这会失败,因为它们不相等对象。
你在问一个2无关的问题。把它分成两个单独的问题会更好。 – Tunaki
如果你正在彻底地测试method2(并且彻底地测试'myservice.getOutput(input)'),而method1只是一个方便的方法来调用method2,那么我可能只有一个方法来证明它确实有效在一些常见的情况下。为'method1'可能做的任何验证添加更多测试(例如'input'非空) –
您是否使用任何类型的模拟框架?它可以在这里帮助,但是示例代码让我知道某处存在设计气味;为什么让一个班级返回两个完全无关的项目? – fge