我将举一个例子:要求:根据这些规则构建一条材料:
在给定的< 100 =>材料是绿色的
100<在< 300 =>之间材料是黄色的
在>之间300 =>材料是红色的
我的考试班:
class MaterialTest{
MaterialConstructor materialCons
public void testBuild(){
materialCons.setAmount(150);
Material material=materialCons.build();
assertEqual(material.getColor(),"Yellow");
}
}
从知道我不知道如何实现materialCons.build();在设计和分析之后,我已经实现了MaterialCosntructor,如下所示:
public class MaterialConstructor {
private Helper1 helper1;
private Helper2 helper2
MaterialConstructor (Helper1 help1, Helper2 help2){
.................
}
public Material build(Double among){
part1=helper1.builpart(among);
return helper2.construct(part1);
}
}
在我的初始测试课程中,我必须包含以下代码:
helper1=createMock(Helper1)
helper2=createMock(Helper2)
materialCons=new MaterialConstructor (helper1, helper2)
.....................
expected(helper1.builpart(150)).andReturn(some result)
expected(helper2.construct(some result)).andReturn("Yellow")
结果我们可以得到这个更新的课程测试:
class MaterialTest{
MaterialConstructor materialCons
public void testBuild(){
helper1=createMock(Helper1)
helper2=createMock(Helper2)
materialCons=new MaterialConstructor (helper1, helper2)
expected(helper1.builpart(150)).andReturn(some result)
expected(helper2.construct(some result)).andReturn("Yellow")
materialCons.setAmount(150);
Material material=materialCons.build();
assertEqual(material.getColor(),"Yellow");
}
}
因此我的测试代码将在写完源代码后更新!
这会出现很多次(因为在规范时很难知道必须使用哪个依赖类来解决问题)。然后在编写源代码之后,单元测试类将永远过时!
答案 0 :(得分:2)
遵循严格的TDD工作流程(例如3 Laws of TDD)肯定会结束您的犹豫。
有了它你就不能拥有“经过设计和分析后我已经实现了MaterialCosntructor ......”之类的东西,因为你应该
只写出足够的生产代码来传递测试
这基本上意味着:只需返回"Yellow"
作为您的第一个实现。
然后你会添加更多的测试(绿色,红色材质)并逐步设计你的类以处理这些额外的情况。
答案 1 :(得分:0)
不,我认为你的想法对于测试对象有单元测试用例是绝对精彩的。我不认为测试类在编写源代码后会过时,因为在你的情况下你设计了类成员和类方法..似乎唯一阻止你的是编写EasyMock测试用例..这里有一些帮助材料,也许会让你更清楚IBM Developer Works Simulation Page ..
EasyMock自述文件还有一个超链接EasyMock ReadMe