c# XUnit का उपयोग कर एक अपवाद का दावा करें




unit-testing (2)

मैं XUnit और Moq का नौसिखिया हूं। मेरे पास एक तरीका है जो एक तर्क के रूप में स्ट्रिंग लेता है। XUnit का उपयोग करके एक अपवाद को संभालने के लिए कैसे।

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException() {
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    //act
    var result = profiles.GetSettingsForUserID("");
    //assert
    //The below statement is not working as expected.
    Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}

परीक्षण के तहत विधि

public IEnumerable<Setting> GetSettingsForUserID(string userid)
{            
    if (string.IsNullOrWhiteSpace(userid)) throw new ArgumentException("User Id Cannot be null");
    var s = profiles.Where(e => e.UserID == userid).SelectMany(e => e.Settings);
    return s;
}

Assert.Throws एक्सप्रेशन अपवाद को पकड़ लेगा और टाइप कर देगा। आप फिर भी मुखर अभिव्यक्ति के बाहर परीक्षण के तहत विधि को बुला रहे हैं और इस प्रकार परीक्षण मामले को विफल कर रहे हैं।

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    // act & assert
    Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}

यदि एएए का अनुसरण करने पर तुली हो, तो आप कार्रवाई को अपने चर में निकाल सकते हैं

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    //act
    Action act = () => profiles.GetSettingsForUserID("");
    //assert
    Assert.Throws<ArgumentException>(act);
}

यदि आप AAA के बारे में कठोर होना चाहते हैं तो आप अपने एक्ट चरण में अपवाद को पकड़ने के लिए Record.Exception से Record.Exception उपयोग कर सकते हैं।

फिर आप Assert चरण में कैप्चर किए गए अपवाद के आधार पर दावे कर सकते हैं।

इसका एक उदाहरण xUnits परीक्षणों में देखा जा सकता है।

[Fact]
public void Exception()
{
    Action testCode = () => { throw new InvalidOperationException(); };

    var ex = Record.Exception(testCode);

    Assert.NotNull(ex);
    Assert.IsType<InvalidOperationException>(ex);
}

यह आपके ऊपर है कि आप किस मार्ग का अनुसरण करना चाहते हैं, और दोनों पथ पूरी तरह से समर्थित हैं जो xUnit प्रदान करता है।





xunit