2

我举个例子:
要求:按照以下规则构造一块材料:
在给定的 <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");

          }
            }

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

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

4

2 回答 2

2

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

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

只编写足以通过测试的生产代码

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

然后,您将添加更多测试(绿色、红色材料)并逐步设计您的类来处理这些额外的案例。

于 2013-01-28T15:11:31.700 回答
0

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

还有一个超链接是由 EasyMock 自述文件自己提供的EasyMock 自述文件

于 2013-01-26T17:02:38.300 回答