處理假設我有以下情形:嘲笑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