![](/img/trans.png)
[英]Problems Running AutoFixture xUnit Theory After Upgrading Project to NuGet 3.0
[英]Using AutoFixture to set properties on a collection as data for an Xunit theory
我是 Xunit 和 AutoFixture 的新手,正在编写一个如下所示的理论:
[Theory, AutoData]
public void Some_Unit_Test(List<MyClass> data)
{
// Test stuff
}
MyClass 看起来像:
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
这会导致 AutoFixture 为每个属性创建一个具有随机值的项目列表。 这很好,但我希望IsActive
属性始终为真。
我可以在每次测试开始时将其设置为 true,但我猜有一种更聪明的方法。 我查看了InlineData
、 ClassData
、 PropertyData
,甚至Inject()
但似乎没有什么合适的。
我该如何改进?
这是执行此操作的一种方法:
public class Test
{
[Theory, TestConventions]
public void ATestMethod(List<MyClass> data)
{
Assert.True(data.All(x => x.IsActive));
}
}
TestConventionsAttribute
定义为:
internal class TestConventionsAttribute : AutoDataAttribute
{
internal TestConventionsAttribute()
: base(new Fixture().Customize(new TestConventions()))
{
}
private class TestConventions : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<MyClass>(c => c.With(x => x.IsActive, true));
}
}
}
谢谢你,尼科斯。 这是非常有用的。 只是一个小的更新,现在过了一段时间,在对应该调用的基本构造函数进行了一些小的更改之后,上面的那个现在已经过时了。 它应该是这样的:
private static readonly Func<IFixture> fixtureFactory = () =>
{
return new Fixture().Customize(new TestConventions());
};
public TestConventionsAttribute()
: base(fixtureFactory)
{
}
private class TestConventions : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<MyClass>(c => c.With(x => x.IsActive, true));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.