如何在编写源代码作为对象依赖项之前编写测试代码?

时间:2013-01-26 16:25:19

标签: unit-testing tdd

我将举一个例子:要求:根据这些规则构建一条材料:
在给定的< 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");

          }
            }

因此我的测试代码将在写完源代码后更新!

这会出现很多次(因为在规范时很难知道必须使用哪个依赖类来解决问题)。然后在编写源代码之后,单元测试类将永远过时!

2 个答案:

答案 0 :(得分:2)

遵循严格的TDD工作流程(例如3 Laws of TDD)肯定会结束您的犹豫。

有了它你就不能拥有“经过设计和分析后我已经实现了MaterialCosntructor ......”之类的东西,因为你应该

  

只写出足够的生产代码来传递测试

这基本上意味着:只需返回"Yellow"作为您的第一个实现。

然后你会添加更多的测试(绿色,红色材质)并逐步设计你的类以处理这些额外的情况。

答案 1 :(得分:0)

不,我认为你的想法对于测试对象有单元测试用例是绝对精彩的。我不认为测试类在编写源代码后会过时,因为在你的情况下你设计了类成员和类方法..似乎唯一阻止你的是编写EasyMock测试用例..这里有一些帮助材料,也许会让你更清楚IBM Developer Works Simulation Page ..

EasyMock自述文件还有一个超链接EasyMock ReadMe