【问题标题】:TDD should I create an empty class needed for a test case?TDD 我应该创建一个测试用例所需的空类吗?
【发布时间】:2014-03-10 06:13:01
【问题描述】:

我是 TDD 新手,很想开始使用它,但每当我正在处理的测试用例需要一个尚不存在的类(作为输入或作为输出)时,我都会遇到困难)。

问题是我不知道是创建没有任何功能的类(这是否被认为是未经测试的代码?),还是停止进行测试(当它是绿色时),并开始为这个新的不存在的类。

第二种方法似乎是递归的,可能会让我失去思路,而第一种方法会创建一个没有测试的新类。

有没有第三种我没有想到的方法,哪个更可取?

【问题讨论】:

    标签: class unit-testing testing tdd methodology


    【解决方案1】:

    您可以双向使用。有时,只是创建一个新的 辅助 类并暂时将其保留为空壳是一种好方法。

    但是,TDD 的主要好处是反馈关于您的代码,因此如果您经常遇到这种情况,您应该停下来考虑一下这告诉您有关 API 设计的哪些信息。 p>

    不过,这本身并没有错,因为它还取决于您的整体方法。如果你在做Outside-In TDD,这往往会发生很多,因为你从抽象级别开始,然后一路向下(而情人级别的课程还不存在)。

    另一方面,如果您使用 自下而上的 TDD,这不应该经常发生,因为您从构建块开始,然后从这些构建块组成更高级别的类.

    在任何情况下,“递归”方法都是使用 Git 的一个例子,因为每次您遇到这种情况时,您都需要编写另一个测试你之前'正在写,可以去

    git stash
    

    然后编写新的测试。当你完成新的测试后,你可以去

    git stash pop
    

    返回原始测试。您可以递归地执行此操作,因此它可以帮助您跟踪您的想法。

    【讨论】:

    • 感谢您的回复。我的问题是我正在尝试做“纯” TDD,即没有设计阶段。这似乎是一个真正的问题,因为它阻止我选择任何一个方向(自上而下,自下而上)。好像我在这里遗漏了一些东西。如果我不应该事先进行任何设计,我应该如何知道从哪里开始(首先编写哪个测试)?
    • 为什么你认为你不能先做设计?你当然可以而且应该。 blog.ploeh.dk/2010/12/22/TheTDDApostate
    • 嗯,我的假设是基于我听到和读到的关于 Robert C. Martin 和 Kent Beck 的很多东西,他们主张设计应该从TDD 过程,以及减少编写第一行测试代码之前的时间的需要(即几乎没有设计时间)。我读过他们的一些书(清洁代码、示例测试驱动开发等)并在 youtube 上听了很多他们的讲座,他们似乎对这种方法非常一致。
    • Robert C. Martin 和 Kent Beck 所说的设计与您从 TDD 获得的反馈一起发生。他们都没有说不允许你提前思考。提前计划是完全可以的,但是你计划得越早,这些计划就应该越灵活。参见例如Robert C. Martin 的书 Agile Principles, Patterns, and Practices.
    • Robert C. Martin 最近发布了his current take on the subject。基本上,他说您应该考虑之前期间,甚至之后 TDD,这与我自己的经验产生了很好的共鸣。
    【解决方案2】:

    在这方面咨询了几位同事后,我才得到了答案!

    当测试 A 类并在测试中发现我需要一个不存在的 B 类时,我会将 B 创建为接口而不是类。这将解决问题(即接口不能/不需要测试)并有助于更好的分离和抽象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多