program tip

XUnit을 사용하여 예외 확인

radiobox 2020. 10. 21. 07:53
반응형

XUnit을 사용하여 예외 확인


저는 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의 표현은 예외를 잡아 유형을 주장한다. 그러나 assert 식 외부에서 테스트중인 메서드를 호출하므로 테스트 케이스가 실패합니다.

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

AAA를 따르는 데 구부러지면 액션을 자체 변수로 추출 할 수 있습니다.

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

AAA에 대해 엄격하게 알고 싶다면 xUnit의 Record.Exception사용 하여 Act 단계에서 예외를 캡처 할 수 있습니다 .

그런 다음 Assert 단계에서 캡처 된 예외를 기반으로 어설 션을 만들 수 있습니다.

이것의 예는 xUnits 테스트 에서 볼 수 있습니다 .

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

    var ex = Record.Exception(testCode);

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

It's up to you what path you want to follow, and both paths are fully supported by what xUnit provides.

참고URL : https://stackoverflow.com/questions/45017295/assert-an-exception-using-xunit

반응형