asy*_*ait 9 unit-testing mocking stubbing
我一直都很困惑.如果我编写一个使用伪代码来断言某些操作的代码,那么当它真正使用真实对象而不是假对象时,我如何信任我的实际实现.
例如,我有这个代码 -
[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);
}
Run Code Online (Sandbox Code Playgroud)
此代码测试"联系"对象的实现,无论是否将其保存到数据库中.如果我碰巧使用存根而不是真正的数据库连接,我是否需要单独测试将其存储在数据库中?而且,你们称之为集成测试吗?
答案真诚地感谢.
小智 17
Martin Fowler 在这里有一个很好的讨论.
从他的文章:
Meszaros使用术语Test Double作为任何类型的假装对象的通用术语,代替用于测试目的的真实对象.这个名字来自电影中特技双人的概念.(他的目标之一是避免使用已经广泛使用的任何名称.)Meszaros然后定义了四种特殊的双重:
在这些双打中,只有嘲讽坚持行为验证.