當有兩個公用方法和一個方法在同一個類中調用另一個公用方法時,測試方法的方法是什麼?如何進行單元測試的情況下,有兩個公共方法,一個調用另一個?
我應該如何在這種情況下編寫單元測試?
一個例子
class SpecificIntMath {
public int add(int a,int b) {
return a+b;
}
public int multiply(int a, int b) {
int mul = 0;
for(int i = 0;i<b,i++) {
mul=add(a,mul);
}
return mul;
}
}
這個例子沒有顯示的兩個參與的方法,但這個概念的複雜性。
我應該分別測試add
和multiply
嗎?如果我只測試multiply
,我覺得我們錯過了multiple
無法提供參數的情況。
假設multiply
和add
需要單獨測試,我應該能夠模擬add
?這怎麼可能?
假設multiply
和add
要單獨測試,我不應該模擬,我應該讓add
照原樣運行。如果是這種情況,我應該如何處理add
中的程序流程?
什麼是測試這種情況的方法。
編輯1:
在下面的代碼,
class MCVC {
public boolean getWhereFrom(List<User> users) {
boolean allDone = true;
for(User user: users){
String url = user.getUrl();
switch(url) {
case Consts.GOOGLE:
someDao.updateFromAddr(user);
user.setEntry("Search Engine");
break;
case Consts.FACEBOOK:
someDao.updateFromAddr(user);
user.setEntry("Social Media");
break;
case Consts.HOME:
someDao.updateToAddr(user);
user.setEntry("Company");
default
user.setEntry(null);
allDone = false;
break;
}
}
return allDone;
}
public void likedDeck() {
List<Users> usersList = deckDao.getPotentialUsers(345L,HttpStatus.OK);
boolean flag = getWhereFrom(usersList);
if(flag) {
for(User user: usersList) {
//some Action
}
}
}
}
我應該考慮getWhereFrom()
在測試likedDeck()
或者我應該承擔任何違約的情況呢?如果我考慮違約情況,那麼在輸出不是違約的情況下,我就會失敗。我不確定我應該嘲笑它,因爲正在調用的課程正在測試中。 Spying/Mocking class under test
只是單獨測試它們。當測試'multiply'時,不要試圖模擬'add',你甚至不知道'multiply'是否會調用'add'(至少在編寫測試時你不應該知道這一點)。 – john16384
另外請注意,當b <0時,你的乘法被破壞 – 2017-04-06 11:36:57