2016-07-20 3 views
0

나는 [SetUp]을 사용하는 것이 확실하다는 것을 알고있다. 그러나 결과를 얻는 코드가 예외를 던질 수있는 가능성이 매우 높다. 테스트를 원한다.N 단위 테스트의 결과를 다른 테스트에서 재사용 할 수 있습니까?

면책 조항 앞에서 우리는 "true"단위 테스트를 수행하지 않습니다. 우리가 만들고있는 것은 통합 테스트로 가장 잘 설명 될 수 있습니다. 디자인이 완료되었습니다. 유닛 테스트를 앞당겨서 만들지 못했고 현재 만들 수있는 리소스가 없습니다.하지만 우리는 더 큰 크기의 자동 커버리지를 얻으려고합니다. 기능의 덩어리.

이러한 청크 중 하나는 외부 데이터베이스의 데이터를 집계하고 내부 데이터베이스의 여러 테이블에 저장하는 다양한 참조가있는 4 개의 복잡한 개체를 만드는 기능입니다. 우리는 이미 주요 집계 함수를 리팩터링하여 집계 함수가 삽입 작업을 수행하기 전에 래퍼 클래스에있는 객체를 반환했습니다. 이제는 호출자가 삽입 작업을 수행하므로 데이터를 데이터베이스에서 자동으로 가져 오지 않고 자동으로 데이터의 유효성을 검사하는 자동화 된 테스트를 작성합니다.

문제는 NUnit에서이 집계 함수를 테스트하려고합니다. 더 세분화 할 수는 없습니다. 그러나 우리는 4 개의 객체 각각을 개별적으로 검증 할뿐만 아니라 그 함수가 어떤 예외도 발생시키지 않는지 확인하고자합니다.

함수는 작은 세트로 실행하는 데 꽤 많은 시간이 걸리므로 각 객체를 테스트하기 위해 똑같은 작업을 4 번 다시 실행하지 않는 것이 좋습니다.

이상적으로는 하나의 복잡한 개체 -> 복잡한 개체 -> 등등에 대한 유효성 검사 결과가 오류없이 피드로 완료되는지 확인하는 테스트를 실행하고 싶습니다. NUnit으로 가능합니까? 아니면 우리가 사용할 수있는 또 다른 패러다임이 있습니까?

최악의 경우, 동일한 데이터 세트에서 4 회 집계를 실행한다고 가정합니다.

+0

설치 프로그램을 사용할 때의 문제점은 무엇입니까? 설치 프로그램에 예외가 있으면 테스트가 실행되지 않고 XYZ 예외로 인해 설정이 실패했음을 알리는 오류가 표시됩니다. 객체를 생성하는 데 비용이 많이 든다면 다른 테스트를 사용할 필드에 객체를 캐시 할 것입니다. –

+0

우리는 이미 N 유닛으로 빠르고 느슨하게 플레이하고 있지만, [Setup]을 "테스트"해서는 안된다는 것이 이해되었습니다. – SmashCode

+1

값을 보유 할 테스트 클래스에 클래스 레벨 변수를 작성하십시오. 면책 조항으로 인해 테스트가 실행되는 순서에 따라 달라 지므로 정상적인 테스트 시나리오에서는 테스트가 실행되지 않고 단위 테스트가 독립적이어야하며 실행에 의존하지 않아야합니다. 만약 내가 당신의 경우 나는 이전 테스트가 실제로 실행되었고 Assert를 던지기 쉽게 테스트 할 수 있도록 변수를 nullable로 만들 것입니다. Assert.Inclusclusive not if. – Kevin

답변

0

이미 "진짜"단위 테스트를하고 있지 때문에, 왜처럼 순서 "단계"의 세트를 호출하는 하나의 "래퍼"테스트 케이스 작성하지 :

[Test] 
public void ShouldPassAllTests() 
{ 
    var result1 = Step1(); 
    var result2 = Step2(result1); 
    var result3 = Step3(result2); 
    Step4(result3); 
} 

private void Step1/2/3/4() 
{ 
    // Arrange Something 
    // Do Something 
    // Assert Something 
} 

그 확실히 적합하지만를 최소한 테스트가 올바른 순서로 실행되는지 확인해야합니다.

당신이 나에게 묻는다면 나는 이런 식으로 의지하는 대신에 코드를 좀 더 테스트 할 수있는 코드로 리팩토링하고 처음부터 적절한 테스트를하려고 노력할 것입니다.

0

설치 프로그램에서 테스트를 수행하는 데 주저함을 느낍니다. 대부분의 단위 테스트 상황에는 적합하지 않습니다. 그러나 때로는 유용하고 NUnit이이를 지원합니다. 설정에서 어설 션 오류가 발생하면 조명기가 실패하고 모든 테스트 메소드가 실패로보고됩니다.

는 는

[NUnit과는 하지 지원은 분해의 분해, 심지어 SuccessException의 모든 예외 실패 무엇 FWIW는 오류가 발생합니다.]

NUnit과 단위보다 더 기능적인 그것의 자신의 몇 가지 검사가 있습니다 테스트 및 그 패턴을 사용합니다. 다소 비용이 많이 드는 어셈블리로드는 OneTimeSetUp에서 한 번 수행됩니다. 몇 가지 단정은 설정이 올바르게 실행되었는지 확인합니다. 그런 다음로드 된 어셈블리에 대해 다양한 독립 테스트가 실행됩니다.

OneTimeSetUp에서 집계 기능을 실행하고 다양한 측면을 검사하는 네 가지 테스트가 있어도 동일한 작업을 쉽게 수행 할 수 있습니다.

필자는이 기능을 테스트하는 유일한 유형이 아닌 한 스타일 론적으로이 테스트 방법에 대해 아무 것도 잘못 본 것이 없다. 그것이 중요하다면 아마 단위 테스트를받을 가치가있을 것입니다.

관련 문제