代码之家  ›  专栏  ›  技术社区  ›  brad

我应该只在BDD中测试公共接口吗?(一般来说,特别是在Ruby中)

  •  5
  • brad  · 技术社区  · 14 年前

    我正在阅读(仍然是测试版) rspec book by the prag progs 因为我对物体的行为测试感兴趣。从我到目前为止收集到的信息(注意:仅阅读30分钟后),我的基本思想是确保我的对象在“外部”表现出预期的行为,即在其输出中以及与其他对象的关系中。

    那么,我真的应该对我的对象进行黑盒测试,以确保与其他对象的正确输出/交互吗?

    我想这个问题可能适用于所有类型的测试??我对TDD和BDD还是相当陌生的。

    3 回复  |  直到 11 年前
        1
  •  10
  •   Lunivore    14 年前

    您不需要编写测试,而是要编写一个如何使用类的示例(除了通过公共方法之外,您不能使用它)。你要展示为什么你的课程对其他课程有价值。您正在定义类的职责范围,同时(通过模拟)显示在其他地方委派的职责。

    同时,您可以质疑职责是否适当,并调整类上的方法,使其尽可能直观地可用。您正在寻找易于理解和使用的代码,而不是易于编写的代码。

    如果你能用例子来思考,并通过行为来提供价值,那么你将创建易于使用的代码,以及其他人可以遵循的例子和描述。您将使您的代码安全且易于更改。如果你考虑测试,你会把它钉住,这样就没有人能打破它。你会很难改变的。

    如果它足够复杂,以至于有一些内部方法确实需要单独测试,请将它们分解到另一个类中,然后说明为什么该类是有价值的,以及它对使用它的类的作用。

    希望这有帮助!

        2
  •  2
  •   Paddyslacker    14 年前

    我认为这里有两个问题。

    一是从BDD的角度来看,您通常在比TDD更高的级别上进行测试。因此,您的BDD测试将断言比TDD测试更大的功能块,并且应该始终是“黑盒”测试。

    第二个问题是,如果您觉得有必要测试私有方法,即使是在单元测试级别,也可能是您的代码违反了 Single Responsibilty Principle 并且应该重构,以便您关心的方法可以作为不同类的公共方法进行测试。MichaelFeathers最近做了一个有趣的演讲 The Deep Synergy Between Testability and Good Design ."

        3
  •  1
  •   Sven Koschnicke    14 年前

    是的,关注类的公开功能。私有方法只是要测试的公共函数的一部分。这一点有点争议,但在我看来,测试一个类的公共功能就足够了(其他一切都违反了OOP原则)。