gpt4 book ai didi

integration-testing - 在我的数据集成测试中使用 autofixture 创建代理

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

我正在尝试为使用 Entity Framework 的域编写一套数据库集成测试。在某些情况下,我更喜欢自动固定对象。我理想的语法是这样的

[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() 的实例

最佳答案

这样的东西会起作用吗?

var fixture = new Fixture();
fixture.Customize<MyEntity>(c => c
.FromFactory<MyDbContext, MyEntity>(ctx => ctx.Set<MyEntity>.Create()));

using (var context = new MyDbContext())
{
fixture.Inject(context);
var item = fixture.CreateAnonymous<MyEntity>();
context.Set<MyEntity>().Add(item);
context.SaveChanges();
}

免责声明:我没有尝试编译这个......

FWIW,如果您将 xUnit.net 与 AutoFixture 一起使用,您可以将测试简化为:
[Theory, MyAutoData]
public void TheTest([Frozen]MyDbContext context, MyEntity item)
{
context.Set<MyEntity>().Add(item);
context.SaveChanges();
}

关于integration-testing - 在我的数据集成测试中使用 autofixture 创建代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391146/

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