我将举一个例子:
要求:按照以下规则构造一 block Material :
给定的 < 100 => Material 是绿色的
<300=>中的100个< Material 为黄色
其中 > 300=> Material 为红色
我的测试类:
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");
}
}
因此我的测试代码将在编写源代码后更新!
这会出现很多次(因为在规范时很难知道必须使用哪个依赖项类来解决问题)。那么单元测试类在写完源代码之后就永远过时了!
最佳答案
遵循严格的 TDD 工作流程,例如 3 Laws of TDD肯定会结束你的犹豫。
有了它,你就不能拥有诸如“在设计和分析之后,我已经实现了 MaterialCosntructor ...”之类的东西,因为你应该这样做
Write only enough production code to pass a test
这基本上意味着:只需返回“Yellow”
作为您的第一个实现。
然后您将添加更多测试(绿色、红色 Material )并逐步设计您的类来处理这些额外的情况。
关于unit-testing - 当对象依赖时,如何在编写源代码之前编写测试代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538910/