【发布时间】:2016-08-01 16:00:53
【问题描述】:
我正在使用AutoFixture 的[AutoData] 属性为一些单元测试(NUnit)提供一个POCO 实例。例如:
[Test, AutoData]
public void Create_NameIsNull_ThrowsException(MyPOCO myPOCO) {..}
我最近向我的 POCO 添加了一个新的字符串属性,该属性必须始终包含格式正确的 URL。
当然,[AutoData] 不知道此要求并为此属性生成通常的基于 GUID 的字符串值。这会导致我的测试失败(因为我有一些基于Data Annotations 的验证)。
我听从了@ploeh 的建议,为 AutoFixture 写了一个Convention-based Customization,专门为我的这个新属性生成一个格式正确的 URL 字符串。它是一个名为UrlSpecimenBuilder 的类,它实现了ISpecimenProvider。
我的问题是,如何将我的新 ISpecimenProvider 与 [AutoData] 结合起来?
我不想在每个单元测试中都去fixture.Customizations.Add(new UrlSpecimenBuilder());。我正在寻找一个可以做同样事情的测试夹具设置步骤。
【问题讨论】:
-
正如我在Twitter conversation 中也提到的,适当的反应是将属性的类型从
string更改为Uri,从而避免Primitive Obsession。在那次谈话中,你还暗示这不适用于这种情况,但由于这对于这篇文章的普通读者来说并不明显,所以我添加了这条评论。
标签: c# unit-testing autofixture