【问题标题】:Why action does not executes function?为什么动作不执行功能?
【发布时间】:2017-08-08 20:36:18
【问题描述】:

我正在使用 xUnit 对我的验证器进行单元测试,并且有时操作无法执行功能。

验证器能够抛出异常,也能够填充包含错误消息的列表。 shouldThroException 参数定义验证器何时应该和不应该抛出异常。如果它不是预期的,那么它应该填充 errorCollection。

此测试失败,因为当代码进入 else 操作时不会调用 ValidateEmailAddress,至少当我使用调试器检查代码时,我看到了这一点。因此,errorcollection 没有被填充并且测试失败。

如何确保操作调用 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 };
        }
    }
}

【问题讨论】:

    标签: c# unit-testing action xunit


    【解决方案1】:

    不知道为什么

    action.ShouldNotThrow();
    

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

    action.ShouldNotThrowExactly<InvalidEmailAddressDigitalLibraryValidationException>();
    

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

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2012-06-04
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2012-08-22
      相关资源
      最近更新 更多