unit-testing - 当对象依赖时,如何在编写源代码之前编写测试代码?

标签 unit-testing tdd

我将举一个例子:
要求:按照以下规则构造一 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/

相关文章:

c# - 从运行时分析生成测试

node.js - 与解构一起使用的 Sinon stub 函数

c# - 单元测试Startup.cs

c++ - 用 Boost::Test 模拟

java - 当前 Servlet 中的 TDD 方法是否可以优化?

php - 无法在 PHPStorm 中运行 PHPUnit 测试

python - 如何将 key 输入终端以进行单元测试

java - 关于如何测试接收字符串并将其放入 ArrayList 的 BufferedReader 和 FileReader 的建议

ruby-on-rails - 你最喜欢的 ruby​​ 和 rails 测试 "gem(s)"或 "plugins"

oop - 违反 SRP、Demeter 法则等的影响