2017-07-25 102 views
0

我使用xUnit對我的驗證器進行了單元測試,並且有一種情況是當動作不執行函數時。爲什麼行動不執行功能?

驗證程序能夠拋出異常並且還能夠填充包含錯誤消息的列表。 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, "[email protected]", new List<string>(), false, 1 }; 
     } 
    } 
} 

回答

0

我不知道爲什麼

action.ShouldNotThrow(); 

不叫validateEmailAddress,但我已經找到了解決辦法。如果我打電話

action.ShouldNotThrowExactly<InvalidEmailAddressDigitalLibraryValidationException>(); 

然後我得到預期的結果。