繁体   English   中英

如何将基于约定的自定义项与AutoFixture的[AutoData]属性结合在一起?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM