나는이 예외에 대한 테스트의 두 가지 주요 방법이 될 것 같습니다 것을 발견했다? 하나는 다른 것보다 이점을 제공합니까? 아니면 단순히 개인 취향의 문제입니까?NUnit Assert.Throws 메서드 또는 ExpectedException 특성을 사용합니까? <pre><code>Assert.Throws<Exception>(()=>MethodThatThrows()); [ExpectedException(typeof(Exception))] </code></pre> <p></p> 이들 중 가장 좋은 것입니다 :
답변
첫 번째는 여러 통화로, 하나 개 이상의 예외 테스트 할 수 있습니다 :
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
두 번째는 당신이 테스트 기능 당 하나 개의 예외 테스트 할 수 있습니다.
테스트는 하나의 논리 비트만을 테스트해야하므로 같은 단위 테스트에서 두 개의 오류를 테스트하는 것이 좋지 않은 것으로 간주되지 않을까요? – SamuelDavis
@ SamuelDavis - 일반적으로 동일한 테스트에서 다른 사례를 테스트하고 싶지는 않습니다. 그러나, 여러 Assert.Throws에 대한 사용 사례가있을 수 있습니다. –
어느 쪽이든, 여기서 예외를 매개 변수로 가져와 예외의 세부 사항을 명시 할 수 있습니다. 또한 "Expected Exception"을 사용한다고해서 다른 메서드 호출에서 throw되는 동일한 예외 유형에 대해 보호되지 않습니다. 여기서는 전체 테스트가 아닌 정확한 방법을 대상으로합니다. 테스트에서 코드를 거의 호출하지 않아도 안전하지는 않습니다. 특히 코드가 복잡 해지거나 너무 예외적 일 때. "ArgumentNullExceptions"와 같은 항목은 많이 throw 될 수 있으며 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");
}
이것은 더 나은 답변 중 하나입니다. 예외가 throw 된 후 무언가가 오류 상태로 들어 갔는지 확인하려는 경우가 일반적입니다. –
주요 차이점은 다음
ExpectedException()
속성 예외 의 시험 방법에 어떤 장소 발생하면 테스트가 통과한다.
Assert.Throws()
을 사용하면 exact
예외가 예상되는 코드 위치를 지정할 수 있습니다.
NUnit 3.0은 공식적으로 ExpectedException
에 공식 지원을 제공합니다.
따라서 ExpectedException()
속성 대신 Assert.Throws()
메서드를 사용하는 것이 좋습니다.
이것은 정답입니다. 덧붙여, Assert.Throws()는 예외를 반환하기 때문에 예외의 속성에 대한 추가 검사가 필요할 수 있습니다. – perfectionist
마지막으로 왜 ExpectedException을 버전 3에서 사용할 수 없는지 대답하십시오. – johnyTee
다음 링크는 https://github.com/nunit/docs/wiki/Breaking-Changes - ExpectedExceptionAttribute를 더 이상 지원하지 않습니다. – Spirit
예상되는 오류 (예 : 이전 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
- 1. Heredoc <<< 또는 <<?
- 2. <script></script> 또는 <script />?
- 3. github add <<<<<<< HEAD
- 4. Tortoise svn <<<<를 파일에 추가 중!
- 5. 무엇을 사용합니까 <%# %>
- 6. <문자열, ArrayList를 <Users>> 또는 HashMap의 <문자열, HashSet의 <Users>>
- 7. Asp.net : <% # 또는 <%
- 8. <p> </p>, 차이</html:html><html:html> 사이 <html></html>
- 9. 어떻게 단어 <ul><li><div><a></a></div></li></ul>
- 10. 이 상황에 가장 적합한 데이터베이스 구조는 무엇입니까?</p> <ul> <li>수확</li> <li>판매 및</li> <li>등</li> </ul> <p>I를</li> <li>고객 및 생산자</li> <li>sale_item를 구입하고 purchase_item :
- 11. git "<<<<<< HEAD"
- 12. "<<<<<< HEAD"템플릿에
- 13. <<< EOT
- 14. <%= %>과 <%: %>
- 15. 레일/자바 스크립트 : 나는 다음과 같은 한 관점에서</p> <pre><code>@min_rating = 4 </code></pre> <p>: 다음</p> <pre><code><%= javascript_tag do %> min_rating = <%= @min_rating %> <% end %> </code></pre> <p>통과 인스턴스 변수는
- 16. bools 쌍을 비교하는 간단한 방법은 무엇입니까?</p> <ul> <li>사</li> <li>ISB</li> <li>ISC</li> <li>isExistingA</li> <li>isExistingB</li> <li>isExistingC</li> </ul> <p>사, ISB, 또는 ISC :
- 17. 메이븐 어셈블리 :</p> <p><em>조립 - 프로젝트 <br> --------- Module1의 <br> --------- 모듈 2</em> : DependencySet 또는 ModuleSet
- 18. java.lang.reflect.InvocationTargetException?</p> <pre><code>java.lang.reflect.InvocationTargetException </code></pre> <p>:
- 19. ExtJs에서 XML 속성을 추가하는 방법은 무엇입니까?</p> <pre><code><Entity><Fields><Field><value>1777</value></Field><id></id></Fields></Entity> </code></pre> <p>Ext.data.writer.XmlView 소스를 사용 :
- 20. "<<<<<<< mine"및 ">>>>>>>> yours"유형 마커가있는 주석이 달린 diff 파일
- 21. 은 iTextSharp에게</p> <pre><code><table><tr><td><img src='images/my.jpg'/></td></tr><tr><td>some text</td></tr></table> </code></pre> <p>QUS pdf 파일의
- 22. 2 개 n 번째 자식 블록</p> <pre><code><div><span></span><span></span><span></span> <div><span></span><span></span><span></span></div> </div> </code></pre> <p>다음 HTML을 감안할 때 N
- 23. PHP : 우리는</p> <pre><code>$symb="_"; $num=10; </code></pre> <p>이
- 24. Objective-C에서 사용자 지정 지시문을 만들 수 있습니까?</p> <ul> <li>@interface</li> <li>@implementation</li> <li>@end</li> <li>@protocol 내가 생각</li> <li>@property</li> <li>@synthesize</li> </ul> <p>:
- 25. 람다 식 내가</p> <pre><code>Expression<Func<SomeType, bool>> predicate </code></pre> <p>에</p> <pre><code>Expression<Func<T, bool>> predicate </code></pre> <p>에서 주조 어떻게
- 26. UINavigationItem :</p> <ul> <li>backBarButtonItem</li> <li>leftBarButtonItem</li> <li>rightBarButtonItem</li> </ul> <p>그러나이 :는 "nextBarButtonItem"(= rightBarButtonItem 화살표)
- 27. 연산자 << : std :: cout << i << (i << 1);
- 28. XAML 코드 상속을 에뮬레이트하는 가장 좋은 방법은 무엇입니까?</p> <ul> <li>DataTypeWholeNumber</li> <li>이 DataTypeLine</li> <li>DataTypeDate는</li> <li>DateTypeDuration</li> <li>는</li> 그들은 모두 일반 C# 클래스에서 상속 </ul> <p>상속 등 :
- 29. 여러 자식이있는 XML 요소에서 Perl 배열을 가져 오기 위해 XML :: Smart를 사용합니까? <pre><code><properties> <one>ONE</one> <two>TWO</two> <three>THREE</three> </properties> </code></pre> <p></p> 나는이 두 배열을 원하는 :
- 30. 가장 잘 반응 형 웹 디자인</p> <pre><code>1.bootstrap 2.w3 </code></pre> <p>또는 기타 방법을 만드는 가장 좋은 방법이 될 것입니다 무엇 RWD 방법
세 번 째 옵션은 유창 스타일 :'Assert.That (() => MethodThatThrows(), Throws.Exception)' – Schneider