我一直有这样的困惑。如果我编写一个使用假代码来断言某些操作的代码,那么当它真正使用真实对象而不是假对象启动时,我如何信任我的真实实现。
例如,我有这样的代码——
[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);
}
此代码测试“联系人”对象的实现,无论该对象是否保存到数据库中。如果我碰巧使用存根而不是真正的数据库连接,我是否需要进行单独的测试以将其存储在数据库中?而且,你们称之为集成测试吗?
衷心感谢您的回答。
马丁·福勒有一个很好的讨论here.
来自他的文章:
Meszaros 使用术语“测试替身”作为用于代替真实对象进行测试目的的任何类型假装对象的通用术语。这个名字来源于电影中特技替身的概念。 (他的目标之一是避免使用任何已经广泛使用的名称。)梅萨罗斯随后定义了四种特殊类型的双精度数:
- 虚拟对象被传递但从未实际使用。通常它们仅用于填充参数列表。
- 假对象实际上有工作实现,但通常采取一些捷径,这使得它们不适合生产(内存数据库就是一个很好的例子)。
- 存根为测试期间拨打的电话提供预设答案,通常根本不响应测试编程之外的任何内容。存根还可以记录有关呼叫的信息,例如记住它“发送”的消息的电子邮件网关存根,或者可能只记录它“发送”的消息数量。
- 模拟就是我们在这里讨论的:用期望预先编程的对象,形成它们期望接收的调用的规范。
在这些类型的双打中,只有模拟坚持行为验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)