[英]How to combine a Convention-based Customization with AutoFixture's [AutoData] attribute?
我正在使用AutoFixture的[AutoData]
属性为某些单元测试(NUnit)提供POCO实例。 例如:
[Test, AutoData]
public void Create_NameIsNull_ThrowsException(MyPOCO myPOCO) {..}
我最近在POCO中添加了一个新的字符串属性,该属性必须始终包含格式正确的URL。
自然, [AutoData]
不了解此要求,并为此属性生成通常的基于GUID的字符串值。 这导致我的测试失败(因为我已经进行了一些基于数据注释的验证)。
我遵循@ploeh的建议,并编写了基于公约的 AutoFixture 定制 ,它专门为我的这个新属性生成了格式正确的URL字符串。 这是一个实现ISpecimenProvider
名为UrlSpecimenBuilder
的类。
我的问题是,如何将新的ISpecimenProvider
与[AutoData]
结合在一起?
我不想去fixture.Customizations.Add(new UrlSpecimenBuilder());
在我的每个单元测试中 我正在寻找一个将执行相同操作的测试夹具设置步骤。
您应该定义自己的AutoDataAttribute
版本并应用所需的所有自定义。 如果自定义项与所有测试都相关,则可以将其称为DefaultAutoData
:
[Test, DefaultAutoData]
public void Create_NameIsNull_ThrowsException(MyPOCO myPOCO) {..}
internal class DefaultAutoDataAttribute : AutoDataAttribute
{
public DefaultAutoDataAttribute()
: base(new Fixture().Customizations.Add(new UrlSpecimenBuilder()))
{
}
}
有关详细信息,请参见Mark Seemann的这篇文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.