为什么动作不执行功能?

时间:2017-07-25 08:42:36

标签: c# unit-testing action xunit

我使用xUnit对我的验证器进行单元测试,并且有一种情况是当action没有执行函数时。

验证程序能够抛出异常并且还能够填充包含错误消息的列表。 shouldThroException参数定义验证器应该和不应该抛出异常的时间。当不期望它时,它应该填充errorCollection。

此测试失败,因为当代码进入else操作时不会调用ValidateEmailAddress,至少在我使用调试器查看代码时,我看到了这一点。因此,不会填充错误集合并且测试失败。

如何确保操作调用ValidateEmailAddress?

[Theory]
[MemberData("StringValidatorValidateEmailAddressShouldPopulateErrorCollection")]
public void StringValidator_ValidateEmailAddress_ShouldPopulateErrorCollection(
    int order,
    string emailAddress,
    List<string> errorCollection,
    bool shouldThroException,
    int expectedAmountOfErrorsInErrorCollection)
{
    // Given

    // When
    Action action = () => this.stringValidator.ValidateEmailAddress(emailAddress, errorCollection);

    // Then
    if (shouldThroException)
    {
        action.ShouldThrowExactly<InvalidEmailAddressDigitalLibraryValidationException();
    }
    else
    {
        action.ShouldNotThrow();
    }
    errorCollection.Count.Should().Be(expectedAmountOfErrorsInErrorCollection);
}

public static IEnumerable<object[]> StringValidatorValidateEmailAddressShouldPopulateErrorCollection
{
    get
    {
        return new List<object[]>
        {
           new object[] { 3, "asd@c", new List<string>(), false, 1 };
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不知道为什么

action.ShouldNotThrow();

不会调用validateEmailAddress,但我找到了一种解决方法。如果我打电话

action.ShouldNotThrowExactly<InvalidEmailAddressDigitalLibraryValidationException>();

然后我得到了预期的结果。