【发布时间】:2017-04-07 15:06:25
【问题描述】:
当有两个公共方法并且一个方法调用同一个类中的另一个公共方法时,如何测试方法?
在这种情况下我应该如何编写单元测试?
一个例子
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
}
}
}
}
在测试likedDeck() 时我应该考虑getWhereFrom() 还是应该假设任何默认情况?如果我考虑默认情况,我会输掉输出不是默认情况的情况。我不确定我应该嘲笑它,因为正在测试正在调用的课程。 Spying/Mocking class under test
【问题讨论】:
-
单独测试它们。不要在测试
multiply时尝试模拟add,你甚至不知道multiply是否会调用add(至少在编写测试时你不应该知道这一点)。 -
另请注意,当 b 时,您的乘法将被破坏
标签: java unit-testing junit mockito