【发布时间】:2013-01-18 01:32:09
【问题描述】:
我正在尝试为我的域编写一套使用实体框架的数据库集成测试。我更喜欢在某些情况下自动固定对象。我理想的语法是这样的
[TestMethod]
public void AutofixtureMyEntityEntity()
{
var fixture = new Fixture();
fixture.Customize<MyEntity>(
c => c.FromFactory<MyDbContext>(ctx => ctx.Set<MyEntity>().Create()));
using (var context = new MyDbContext())
{
fixture.Inject(context);
var entity = fixture.CreateAnonymous<MyEntity>();
context.Set<MyEntity>().Add(entity);
context.SaveChanges();
}
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void AutoFixtureMyEntityEntityWithoutInjection()
{
var fixture = new Fixture();
fixture.Customize<MyEntity>(
c => c.FromFactory<MyDbContext>(ctx => ctx.Set<MyEntity>().Create()));
using (var context = new MyDbContext())
{
var entity = fixture.CreateAnonymous<MyEntity>();
context.Set<MyEntity>().Add(entity);
context.SaveChanges();
}
}
显然,这是行不通的,因为CreateAnonymous() 不期望工厂的输入参数。我只能假设我对FromFactory() 提供的内容有错误的理解。虽然评论说,
/// Specifies that a specimen should be created in a particular way, using a single input
/// parameter for the factory.
在阅读了ploehs blog 之后,我对这些部分如何相互作用感到有些困惑。
工厂调用时MyDbContext的实例不是我传递给Inject()的实例
【问题讨论】:
-
您可以使用
fixture.Inject( context),这意味着对上下文的任何要求都将使用该实例。那行得通吗? (老实说,你的问题很混乱——你有很多建议的方法,很高兴知道你已经尝试过了,但你遇到的单个问题对我来说并不是 100% 清楚) -
鲁本,我试图收紧这个例子。在没有任何运气的情况下,我在 Inject 上搞砸了,我试图在每次调用创建匿名之前向工厂提供一个实例。
标签: integration-testing autofixture