대 내가있어 여러 unittests :코드 커버리지 ExpectedException
[TestMethod()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception()
{
var foo = new Foo();
Foo.DoStuff (null);
}
그것은 그 코드 커버리지가 반으로 실행 던지는 라인을 markes, 그래서 노출 된 코드의 한 블록마다 얻을 밝혀졌습니다.
잠시 동안이 문제에 대해 생각한 후에 내가 할 수있는 최선의 해결책은 try/catch를 추가하는 것이 었습니다. 이 반복되는 패턴이기 때문에, 나는 비 던지는 시험을 모든 예외 테스트를 추가 할 수있는 좋은 측면 혜택을 것
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
이의 라인을 따라 도우미 메서드를 만들려고하고있다.
유효한 디자인입니까, 아니면 놓친 것이 있습니까?
편집 : Ugs ... 위의 ExpectException 메서드가 1 개의 차단 된 블록을 남겨 둡니다.
+1. 좋은 물건. 이것은 잠시 나를 잔소리 해 왔지만 결코 고치려하지 않았습니다. – magnus