gpt4 book ai didi

unit-testing - 什么时候使用 stub 和模拟?

转载 作者:行者123 更新时间:2023-12-04 03:19:43 26 4
gpt4 key购买 nike

我一直都很困惑。如果我编写的代码使用伪造的代码来声明某些操作,那么当我开始使用真正的对象而不是伪造的对象时,我如何信任我的真正实现。

例如,我有这段代码-

    [Test]
public void CanCreateContactsWithData()
{
using(ISession session = factory.OpenSession())
using (ITransaction trans = session.BeginTransaction())
{
_contactId = (long) session.Save(contact);
trans.Commit();
}

Assert.AreNotEqual(0, _contactId);
}

此代码测试是否将“联系人”对象保存到数据库中。如果我碰巧使用 stub 而不是真实的数据库连接,是否需要进行单独的测试以将其存储在数据库中?而且,你们将此称为集成测试吗?

衷心感谢您的回答。

最佳答案

马丁·福勒(Martin Fowler)的讨论很好here

从他的文章:

Meszaros使用术语Test Double作为测试对象代替真实对象使用的任何假装对象的通用术语。该名称来自电影中的特技双重概念。 (他的目标之一是避免使用已经被广泛使用的任何名称。)然后,Meszaros定义了四种特殊的double类型:

  • 虚拟对象可以传递,但从未实际使用过。通常它们仅用于填充参数列表。
  • 假对象实际上具有有效的实现,但是通常采取一些捷径,这使其不适合生产(内存数据库是一个很好的示例)。
  • stub 为测试期间进行的调用提供 jar 装答案,通常对测试中未编写的任何内容完全不响应。 stub 还可以记录有关调用的信息,例如,电子邮件网关 stub 可以记住“已发送”的消息,或者仅记住“已发送”的消息数量。
  • Mocks是我们在这里所说的:用期望预先编程的对象,这些对象形成了期望接收的调用的规范。

  • 在这些类型的 double 中,只有 mock 者坚持进行行为验证。

    关于unit-testing - 什么时候使用 stub 和模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288168/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com