【问题标题】:Where should you unit test your validation?你应该在哪里对你的验证进行单元测试?
【发布时间】:2009-11-19 00:54:49
【问题描述】:

这让我困扰了一段时间。我将所有验证都放在服务层中。但是,当我进行单元测试时,我通常会通过操作方法传递所有内容。然后进入我的服务层,其中包含验证。

所以我现在不确定这是否是最好的方法。因为通常他们说你应该只测试那个方法。

你们觉得呢?

【问题讨论】:

    标签: c# .net asp.net-mvc unit-testing


    【解决方案1】:

    如果您通过操作请求传递所有内容,那么听起来您正在进行集成测试。

    如果您正在进行(单元)测试,那么您应该测试单元。在这种情况下,您将向服务层传递所需的所有数据以(模拟)操作请求。

    你应该模拟传递给服务层的对象,传递它,然后根据你实际得到的结果断言预期的结果。

    编辑

    作为补充,端到端或集成测试非常棒,因为它证明(过程)有效。

    但是,您必须进行单元测试,因为它们将测试各个组件,并且比端到端测试能够或将要更快地将您归零。

    【讨论】:

    • 那么我不应该测试视图吗?就像我所拥有的一样,基本上有一个方法,在 if 语句中会调用 Create(),这将进行验证并创建一些东西然后返回 true。然后我只是返回一些东西。那么在视图中会有什么要测试的吗?就像我假设我会模拟那个 Create Method 那样,因为我没有测试它。所以实际上它只是一个返回 true 的 if 语句。
    • 在这种情况下,我可能不会费心测试视图。 TDD 是您需要自己设计的东西,以使其最适合您的应用程序。没有适用于所有应用程序的 1 个公式。确定您需要为什么编写测试,以便您可以随时运行它们并识别应用程序中其他地方的代码更改引起的任何问题。 www.dnrtv.com 在 TDD 上有 Venkat 的精彩表演。我强烈建议您查看它。
    【解决方案2】:

    如果我是你,我会单独测试服务层——其中包含验证——而不是通过操作方法。

    这样做的原因是我想让我的测试代码“一次只做一个测试”。我对我的控制器进行了测试,专门测试模型和视图的交互,而不是其他东西;我想专门针对服务层和验证进行测试。

    当您进行单元测试时,mocks 是不可避免的。

    【讨论】:

    • +1。是的,有一个集成测试的案例,但在你开始之前,我认为你需要进行单元测试。这样,如果您在任何地方进行更改,都比集成测试更快。
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2010-09-07
    • 2017-06-10
    • 2018-10-09
    • 2011-09-27
    • 2010-09-05
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多