我们正在尝试对依赖于 Entity Framework 4.1 的代码进行单元测试。我看过几篇针对 POCO 实施单元测试的帖子,但我们希望保留默认的 EF 管道,以便我们可以轻松使用EF Caching Wrapper。
FakeItEasy 似乎可以处理抽象出 EF 的问题,但我在断言发生的事情时遇到了问题。例如,我的模型中有这段代码(其中还有另一个Email
部分类,它是 EF 数据库优先向导自动生成的代码):
public partial class Email
{
IMyEntities _dataContext;
public Email(IMyEntities myEntities)
{
_dataContext = myEntities;
}
public void SendEmails()
{
// ... code to send emails goes here...
_dataContext.Emails.AddObject(this);
_dataContext.SaveChanges();
}
}
然后在我用 FakeItEasy 进行的单元测试中:
var context = A.Fake<IMyEntities>();
var email = A.Fake<Email>(context);
// ... code to configure email goes here ...
email.SendEmails();
// this fails with a FakeItEasy.ExpectationException...
A.CallTo(() => context.Email.AddObject(email)).MustHaveHappened();
我怎么能从我的单元测试中知道context.Emails.AddObject
实际上确实被调用了?
谢谢!