【问题标题】:New to mocking frameworks模拟框架的新手
【发布时间】:2013-07-04 09:32:20
【问题描述】:

我正在尝试以单个开发人员的身份进行测试驱动开发(可能将团队增加到四个)。我有使用 NUnit 进行单元测试的有限扩展经验。

我已经开发这个系统几年了(VB.NET)。我之前的开发人员在该系统上工作了三年,他偏爱 Martin Fowlers 事务脚本方法,这意味着存在具有大型单体功能的大型类,几乎没有考虑设计/可重用性等。

我研究了一些可用于 Nunit 的 Mocking 框架,我相信我唯一的选择是商业产品 TypeMock (RhinoMock vs. TypeMock vs. NUnit's Mocking?),因为它允许您模拟非抽象且没有接口的类。这是正确的吗?

我在这里阅读了一些帖子,表明情况并非如此。因此提出这个问题的原因。我可以为事务脚本/单片系统使用任何免费的模拟框架吗?

【问题讨论】:

    标签: .net unit-testing mocking nunit


    【解决方案1】:

    简答

    如果您没有抽象类或接口,那么您将不得不使用像TypeMockMicrosoft's Fakes 这样的产品。

    长答案

    不要走这条路。 TDD 的主要优点是它迫使您拥有松散耦合的代码和清晰的抽象。否则,您的测试将变得非常难以设置和维护。

    你真正需要做的是重构。慢慢来。这是我的建议。

    1. 首先找到一个难以测试的组件,然后确定所有依赖项。
    2. 开始从这些类中提取接口,然后使依赖类改为依赖于这些接口。
    3. 通过构造函数或属性使它们“可注入”来反转依赖关系。
    4. 开始编写测试来描述该类的行为,模拟依赖关系。
    5. 冲洗重复,直到您可以开始驯服您的代码库。

    没有接口的模拟类对于您控制的代码很有用。但这仍然很困难,并且随着时间的推移会变得笨拙和复杂。

    让您的测试与您对话。 如果您的测试难以使用或设置复杂,则意味着您的代码需要重构。不要忽视这些反馈。

    【讨论】:

    • +1 我总是主张遵循一条会导致小型、松散耦合单元的路径——一旦你有了它,就会有很多免费的 Mocking 框架——Moq 是我个人的最爱.
    • 最小起订量 +1。很长一段时间以来,我一直是 Rhino Mocks 的人,但多年来一直只使用 Moq。
    • 感谢您的明确回答 +1。我正在重构代码。因此,应用程序的一部分现在是事务脚本(单体),一部分是域模型(抽象、接口、多态性等)。应用程序在重构期间处于这种状态是否很常见?我应该只对重构代码使用模拟对象吗?
    • @w0051977 - 任何不是从头开始使用 TDD 构建的遗留应用程序都可能看起来像这样。老实说,我会将我的单元测试工作集中在我可以控制/模拟的代码上,并在我无法控制的领域使用集成测试。这样,当您开始重构时,您至少有 一些 测试覆盖率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多