나는 이것이 예외를 테스트하는 두 가지 주요 방법 인 것으로 나타났습니다.
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
이 중 어느 것이 가장 좋을까요? 하나는 다른 것보다 장점을 제공합니까? 아니면 단순히 개인적인 취향의 문제입니까?
답변
첫 번째는 여러 번의 호출로 둘 이상의 예외를 테스트 할 수있게합니다.
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
두 번째는 테스트 기능 당 하나의 예외 만 테스트 할 수 있습니다.
답변
주요 차이점은 다음과 같습니다.
ExpectedException()
테스트 메소드의 어느 위치 에서나 예외가 발생하면 속성이 테스트를 통과 시킵니다.
의 사용법은 예외가 예상되는 코드의 위치 Assert.Throws()
를 지정할 수있게합니다 exact
.
NUnit 3.0은 ExpectedException
모두 공식 지원을 중단합니다.
따라서 속성 Assert.Throws()
보다는 메소드 를 사용 하는 것이 좋습니다 ExpectedException()
.
답변
예외가 발생한 후 다른 조건을 확인하고 주장 할 수 있기 때문에 assert.throws를 선호합니다.
[Test]
[Category("Slow")]
public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
{
// the exception we expect thrown from the IsValidFileName method
var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName(""));
// now we can test the exception itself
Assert.That(ex.Message == "Blah");
}
답변
예전 attrib 버전과 같이 예상되는 오류를 강력하게 입력 할 수도 있습니다.
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
답변
이전 버전 ( <= 2.0 ) NUnit
을 사용하는 경우을 사용해야 ExpectedException
합니다.
당신이 사용하는 경우 2.5 이상 버전을 당신은 사용할 수 있습니다Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
사용 방법 :
https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5