【发布时间】:2011-05-17 20:23:44
【问题描述】:
总的来说,我对 Mockito、jUnit 和 TDD 非常陌生,我尝试学习正确的方法来执行 TDD。我需要几个例子来启动我的大脑。所以请帮助我
所以我有一个方法getNameInc(String dirPath, String filenName)。所以给定一个像bankAccount.pdf这样的文件名,如果在这个文件夹中,没有文件名bankAccount.pdf,则返回bankAccountAA.pdf。如果存在一个bankAccount.pdf,那么return bankAccountBB.pdf increment 就是AA-ZZ。当它到达ZZ 时,它会回滚到AA。我已经实现了这个方法的逻辑。如何使用 Mockiti 和 jUnit 对该方法进行单元测试?
编辑
这里是涉及到的类和方法。
public class PProcessor{
private final Map<Integer, String> incMap = new HashMap<Integer, String>();
private String getNameInc(String dirPath, String filenName){
String[] nameList = new File(dirPath).list(new FilenameFilter(){
public boolean accept(File file, String name) {
//only load pdf files
return (name.toLowerCase().endsWith(".pdf"));
}
});
//Return the number of occurance that a given file name appear
//inside the output folder.
int freq = 0;
for(int i=0; i<nameList.length; i++){
if(fileName.equals(nameList[i].substring(0, 8))){
freq++;
}
}
return incMap.get(freq);
}
private void generateIncHashMap(){
incMap.put(new Integer(0), "AA");
incMap.put(new Integer(1), "BB");
incMap.put(new Integer(2), "CC");
...
}
}
generateIncHashMap()会在构造函数中被调用来预生成哈希映射
【问题讨论】:
-
我认为你错过了模拟的重点。模拟不应该实现任何逻辑。通常,它只会根据正在使用的测试用例返回硬编码值。
-
@Mike:我已经实现了逻辑。我已经实现了
getNameInc(String dirPath, String fileName)方法。我只是想知道如何对其进行单元测试。它可以是 mockito 或普通的旧 jUnit。我试着学习这个想法。 -
很高兴您想使用 TDD!但是从您最后的评论中听起来好像您首先编写了逻辑......这与 TDD 的工作方式相反。首先编写一个失败的测试,然后用真实的代码使测试通过,然后重构该代码,使其更简洁,但除了通过测试之外没有任何作用。然后编写另一个失败的测试。 Mockito 可以帮助您排除您的班级所依赖的复杂服务。您能否使用正在协作开发此功能的课程更新您的问题?
-
@alpian:我用一些代码更新了我的帖子。你能看看他们吗?
标签: java unit-testing junit mockito