我有一个继承自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子句。非常感谢您提供的任何帮助。
答案 0 :(得分:2)
您可以使用GuardClauseAssertion
Verify
的一个重载,其中ConstructorInfo作为参数。
然后,您可以通过仅选择属于ZipCode
类的构造函数来进一步约束断言:
[Test, AutoData]
public void SutConstructorHasAppropriateGuardClauses(
GuardClauseAssertion assertion)
{
assertion.Verify(
typeof(ZipCode).GetConstructors(BindingFlags.Public));
}
虽然我无法访问SemanticType项目,但上述测试通常应该通过。