【问题标题】:Unit Testing with a Mocked Class使用模拟类进行单元测试
【发布时间】:2015-03-17 19:49:18
【问题描述】:

我查看的一些网站指出,当您(开发人员)正在实现您的类 (X) 时,该类 (X) 依赖于另一个类 (Y) 获取信息,并假设您的开发团队尚未开发类 (Y) ,那么在你对类 (X) 的单元测试中,你应该模拟类 (Y)。

我想知道的是,当开发团队最终实现类 (Y) 时,你应该怎么做?类 (X) 的开发人员现在是否必须返回到他/她创建类 (Y) 的模拟并调用真实对象的单元测试?

如果我们将真正的开发时间表放入透视图中,类 (X) 可能在类 (Y) 和类 (X) 的开发人员之前实现了一个月或更长时间,而类 (X) 的开发人员也为类 (X) 编写了单元测试) 可能已经转移到分配给他/她的其他任务;这个人现在怎么能分配时间回去重新投入时间来重写他们的旧单元测试 - 这不只是一场管理噩梦吗?

【问题讨论】:

    标签: unit-testing testing junit mocking mockito


    【解决方案1】:

    所以,我想说,如果您只是将模拟留在其中,您可以在测试中实现更好的分离和独立性——您可以通过这种方式进行真正的单元测试,而如果您用实际的实例替换模拟类然后你正在创建集成测试。真的是两种思想流派,mockist vs. classical。就个人而言,我更喜欢 mockist 风格,并且知道我的测试更能适应变化,因为我是这样写的。如果我进行了更多的经典风格测试,那么测试失败的原因就会更多(可能是我的测试对象所依赖的任何底层实现发生了变化),并且当测试失败时,它会更少明确导致失败的确切原因。

    【讨论】:

    • 无论如何,您确实希望进行持续集成测试,以便获得稳定功能的最短后备路径。那么,您是否愿意将测试工作加倍,即针对模拟对象编写测试,然后针对真实对象重新编写测试?我不反对您关于针对模拟依赖项进行真正的单元测试的想法,但我正在尝试找到一种方法来从长远来看以更少的努力来实现相同的测试结果-也许是因为我认为自己很懒:)跨度>
    • 集成测试/验收测试最终会使用真实的对象,但是他们不必如此彻底地测试每条路径。 Object Y 的其他开发者也应该有自己的测试来验证他们是否正确地实现了接口。
    • @Tikky,就个人而言,我喜欢以测试驱动的开发风格工作,我在代码通过之前编写测试。这是一项可能需要一段时间才能开发的技能,尤其是如果您已经习惯了不进行测试或在生产代码之后开发测试的情况下,但在我看来,这是非常值得的。作为一名开发人员,如果其他人担心集成测试,我更愿意,但有时我确实需要编写这些测试——同样,我的目标是将所需的组件保持在最低限度。对于我的目的,我对这样的测试集合非常满意。
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多