【问题标题】:What Do You Call Objects Created To Be Returned From Mocks?你把创建的对象称为从模拟返回的对象是什么?
【发布时间】:2013-07-30 16:18:35
【问题描述】:

是否有专门用于从单元测试中的模拟方法返回的对象的术语?

创建断言的对象是预期的。 你实际得到的是实际。 你输入的东西是input。

在您选择的模拟框架中,您如何称呼您正在制作的对象然后传递给.andReturn(someObject) 调用?我发现如果这些对象没有命名约定,那么数据密集型测试就更难理解了。

【问题讨论】:

  • 模拟对象可能会返回其他模拟对象或真实对象,而后者又可能返回模拟对象等,所以我认为它们没有名称

标签: unit-testing testing mocking tdd


【解决方案1】:

我称它们为“罐头答案”,但这不限于对象,它们可以是原始类型。

【讨论】:

    【解决方案2】:

    Gerard Meszaros 的书“xUnit 测试模式:重构测试代码”将专门用于单元测试的对象统称为“测试替身”。他确定了几种常用的替身:

    • 测试存根
      • 返回预期结果,和/或调用预期方法。用于强制生产代码按照所需路径进行。
    • 测试间谍
      • 观察调用代码,记录调用内容以供以后验证。返回强制生产代码沿所需路径运行的值。
    • 测试模拟
      • 以一组期望以某种方式调用它进行初始化,然后观察进行的调用并在失败的情况下抛出异常。返回强制生产代码沿所需路径运行的值。
    • 假对象
      • 真实对象的简化版本。主要用途是代替尚未构建的依赖组件。通常用于替换数据库或服务。
    • 虚拟对象
      • 非常简单的对象,满足对测试不重要的方法签名要求。空对象或空字符串是常见的假人。

    在您的情况下,这些将被视为虚拟对象。它们只是由您的逻辑返回,但它们的内容对测试无关紧要。

    【讨论】:

    • 谢谢,非常有用。对象的价值确实很重要,因为它们有时用于组装最终的预期输出。你还会考虑这些假人吗?
    • @Deejay,如果它们返回值我依赖于在被测代码路径中做出进一步决定,我可能会将它们归类为存根。如果我只需要他们返回测试例程的值,我可能会称他们为假人。一个示例可能是包含 10% Discount 对象的 Product 对象。 Product 会将代码驱动到折扣逻辑中,因此它是一个存根。如果在此测试中折扣金额为 10% 或 20% 无关紧要,则它是一个虚拟变量。如果我确保 10% 的折扣逻辑计算出 10.00 美元的产品节省了 1.00 美元,那么它就是假的。
    【解决方案3】:

    我认为'mock object'或'fake'是你想要的?

    【讨论】:

    • 我在考虑模拟对象是被模拟的东西,而不是模拟返回的东西。不过,听到其他人如何命名事物总是很有趣。
    • 模拟对象模仿真实对象的界面。并返回预先安排好的响应。
    • 谢谢 - 他们确实如此。您是否知道“预先安排的响应”的任何简洁且被广泛接受的术语?这就是我想要找出的一点。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多