【问题标题】:Is it ok to verify using another public method while unit testing a public method是否可以在对公共方法进行单元测试时使用另一个公共方法进行验证
【发布时间】:2011-08-04 11:05:27
【问题描述】:

我正在尝试为尚未实现的 Queue 类提出一个测试用例。在尝试为 testEnqueue 方法编写代码时,除了使用 size() 或 dequeue() 之外,我找不到其他验证方法。

是否可以使用其他公共方法(例如:size/dequeue)来验证同一类的公共方法(入队)的测试用例?

【问题讨论】:

    标签: unit-testing junit tdd


    【解决方案1】:

    是的,这无疑是一种适当的验证方式。

    【讨论】:

      【解决方案2】:

      是的,通过对象的外部接口进行测试是理想的(而不是侵入其内部进行验证)。只要每个行为都经过测试,你就不应该有任何问题。如果 Enqueue 依赖于 Size() 并且 Size 已经被证明可以按预期工作,那么您可以像您提到的那样安全地编写测试。

      对于这个例子,我可能从实现 Size() [0 个元素,使用 1 个元素创建的队列,n 个元素] 开始。然后移动到 Enqueue() 并验证 Size 是否增加了 1。

      你在正确的轨道上。

      【讨论】:

        【解决方案3】:

        据我了解,您在这里看到了一个典型的先有鸡还是先有蛋的问题 - 您如何测试 a() 并使用 b() 验证其行为,然后使用 a() 测试 b()。从理论上讲,如果两者都不正确,测试可能仍然通过......就像使用 JUnit 测试 JUnit。

        但是,如果您将代码视为一个黑盒(在执行 TDD 时就是这种情况),并且您只是编写为您的类/单元提供一些输入并验证输出的测试,那么这种方法没有任何问题。请记住测试所有典型案例和极端案例/边界条件 - 如果它们符合您的业务预期,会出现什么问题?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多