NUnit 3.0 및 Assert.Throws
NUnit 3.0으로 일부 단위 테스트를 작성 중이며 v2.x와 달리 ExpectedException()
라이브러리에서 제거되었습니다.
이 답변을 바탕으로 테스트에서 시스템이 예외를 던질 것으로 예상하는 위치를 구체적으로 파악하려는 논리를 확실히 볼 수 있습니다 (단순히 '테스트의 모든 위치'라고 말하는 대신).
그러나 나는 나의 Arrange, Act 및 Assert 단계에 대해 매우 명백한 경향이 있으며 이것이 도전을 만듭니다.
나는 다음과 같은 것을 사용했습니다.
[Test, ExpectedException(typeof(FormatException))]
public void Should_not_convert_from_prinergy_date_time_sample1()
{
//Arrange
string testDate = "20121123120122";
//Act
testDate.FromPrinergyDateTime();
//Assert
Assert.Fail("FromPrinergyDateTime should throw an exception parsing invalid input.");
}
이제 다음과 같이해야합니다.
[Test]
public void Should_not_convert_from_prinergy_date_time_sample2()
{
//Arrange
string testDate = "20121123120122";
//Act/Assert
Assert.Throws<FormatException>(() => testDate.FromPrinergyDateTime());
}
이것은 끔찍하지 않지만 제 생각에는 Act와 Assert를 혼란스럽게 만듭니다. (분명히이 간단한 테스트의 경우 따르기가 어렵지 않지만 더 큰 테스트에서는 더 어려울 수 있습니다.)
나는 동료가 내가 Assert.Throws
완전히 제거 하고 다음과 같은 일을 할 것을 제안했습니다 .
[Test]
public void Should_not_convert_from_prinergy_date_time_sample3()
{
//Arrange
int exceptions = 0;
string testDate = "20121123120122";
//Act
try
{
testDate.FromPrinergyDateTime();
}
catch (FormatException) { exceptions++;}
//Assert
Assert.AreEqual(1, exceptions);
}
여기서는 엄격한 AAA 형식을 고수하지만 훨씬 더 부풀어 오릅니다.
그래서 제 질문은 AAA 스타일의 테스터들에게 전달됩니다. 제가 여기서하려는 것과 같은 예외 검증 테스트를 어떻게 하시겠습니까?
이 경우에는 Act / Assert 단계를 결합하는 데 신경 쓰지 않아도 어디에서 왔는지 알 수 있습니다.
내가 생각할 수있는 유일한 방법은 실제 델리게이트 (여기서 to FromPrinergyDateTime
)를 "act"단계로 변수에 저장 한 다음이를 주장하는 것입니다.
[Test]
public void Should_not_convert_from_prinergy_date_time_sample2()
{
//Arrange
string testDate = "20121123120122";
//Act
ActualValueDelegate<object> testDelegate = () => testDate.FromPrinergyDateTime();
//Assert
Assert.That(testDelegate, Throws.TypeOf<FormatException>());
}
나는 "행동"단계가 실제로 행동하는 것이 아니라 행동이 무엇인지 정의한다는 것을 알게됩니다. 그러나 테스트중인 작업을 명확하게 설명합니다.
C # 7에는 다른 옵션이 있습니다 (기존 답변과 매우 유사하지만).
[Test]
public void Should_not_convert_from_prinergy_date_time_sample2()
{
void CheckFunction()
{
//Arrange
string testDate = "20121123120122";
//Act
testDate.FromPrinergyDateTime();
}
//Assert
Assert.Throws(typeof(Exception), CheckFunction);
}
You can create a custom Attribute in NUnit 3. Here is the sample code how to create [ExpectedException] Attribute.(ExpectedExceptionExample Shows how to implement a custom attribute for NUnit) https://github.com/nunit/nunit-csharp-samples
참고URL : https://stackoverflow.com/questions/33897323/nunit-3-0-and-assert-throws
'Programing' 카테고리의 다른 글
Dagger and Butter Knife vs. Android 주석 (0) | 2020.11.25 |
---|---|
Java 8 Collectors.toMap SortedMap (0) | 2020.11.25 |
jQuery를 사용하여 ASP.NET 웹 서비스를 호출하는 방법은 무엇입니까? (0) | 2020.11.25 |
Java 메서드 주석은 메서드 재정의와 함께 어떻게 작동합니까? (0) | 2020.11.25 |
앱을 다운로드하고 설치할 때 기기에서 .apk 파일을 어디에서 찾을 수 있습니까? (0) | 2020.11.25 |