如何阻止AutoFixture的GuardClauseAssertion检查继承类中的构造函数?

时间:2015-02-19 14:54:14

标签: c# testing autofixture

我有一个继承自Semantic Type project

中的SemanticType类的类

我正在尝试测试我的类并确保我有一个保护子句阻止Null和空字符串被传递。但是,测试失败,因为继承的类SemanticType没有Guard子句。我怎么哄AutoFixture只查看我的ZipCode类中的构造函数?

public class ZipCode : SemanticType<string>
{
    public ZipCode(string value) : base(IsValid, value)
    {
        Guard.NotNullOrEmpty(() => value, value);
        Guard.IsValid(() => value, value, IsValid, "Invalid Zip Code");
     }
 }

调试时,SemanticTypes.dll中的测试失败并显示以下消息:

  

SemanticTypes.dll中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

换句话说,SemanticType中的构造函数中没有Guard子句。非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用GuardClauseAssertion Verify的一个重载,其中ConstructorInfo作为参数。

然后,您可以通过仅选择属于ZipCode类的构造函数来进一步约束断言:

[Test, AutoData]
public void SutConstructorHasAppropriateGuardClauses(
    GuardClauseAssertion assertion)
{
    assertion.Verify(
        typeof(ZipCode).GetConstructors(BindingFlags.Public));
}

虽然我无法访问SemanticType项目,但上述测试通常应该通过。