2011-01-13 5 views
3

논리 테스트에 실패하면 Assert (...)를 사용하면 단위 테스트가 중단되고 나머지 단위 테스트는 실행되지 않습니다. 논리적 테스트가 실패 할 수있는 방법이 있긴하지만 경고 또는 뭔가를 제공하고 나머지 단위 테스트를 계속 실행합니까?C# 단위 테스트가 실패 대신 경고합니다.

예를 들어, 일부 학생, 교사 및 수업을 생성하고 관계를 생성 한 다음 데이터베이스에 배치하는 테스트가 있습니다. 그런 다음 일부 SSIS 패키지가이 데이터베이스에서 실행되어 기존 데이터를 가져 와서 다른 데이터베이스의 다른 데이터베이스 스키마로 변환합니다. 그런 다음 테스트는 정확한 수, 행 수 등과 같은 특정 항목에 대해 새 데이터베이스를 확인해야합니다.

분명히 다른 테스트는 삭제 및 개조이지만 모두 동일한 구조를 따르므로 원본 db, SSIS 패키지를 실행하고 대상 db의 데이터를 확인합니다.

+1

시나리오를 더 잘 설명 할 수 있습니까? 당신이 내가 조언할만한 뭔가를하고있는 것처럼 들리 네요. – NerdFury

+0

컨텍스트로 업데이트되었습니다. 나는 당신의 단위 테스트를 녹색으로 통과시키는 것이 가장 좋은 방법임을 알고있다. 그러나 우선 순위가 낮은 알려진 버그가있는 경우, Asserts의 순서는 우선 순위가 높은 버그를 숨기고 있음을 의미 할 수있다. – link664

+0

알려진 버그가있는 경우 실패한 테스트가 있어야합니다. 버그를 무시하려면 복제 또는 유사한 테스트를 실시하고 테스트 실행을 단락시키는 어설 션을 제거하여 실제로 수행 할 작업을 테스트 할 수 있습니다. – NerdFury

답변

9

단일 테스트에서 너무 많은 테스트를 시도하는 것처럼 들립니다.

전제 조건이 충족되지 않으면 아마도 나머지 테스트가 통과하지 못할 것입니다. 나는 내가 기대하는 바를 모르고있는 한 빨리 테스트를 끝내기를 원합니다.

단위 테스트의 개념은 빨간색 실패, 녹색 통과입니다. 나는 MSTest가 노란색을 허용한다는 것을 알고 있지만, 원하는대로 할 수는 없다. 당신은 Assert를 할 수 있습니다. 필자는 특정 데이터베이스 데이터에 의존하는 많은 통합 테스트를 수행 한 코드 기반에서 작업 할 때 이것을 사용했습니다. 테스트가 실패하지 않고 결과가 결정적이지 않게되었습니다. 코드가 제대로 작동했지만 데이터가 누락되었을 수 있습니다. 그리고 데이터가 항상 존재할 것이라고 믿을만한 이유가 없었습니다 (그들은 IMO 테스트가 좋지 않았습니다).

0

단위 테스트는 검정이거나 흰색입니다. 테스트를 통과했는지 여부에 관계없이 논리를 깨고 있는지 여부에 따라 DB의 데이터가 올바른지 아닌지 (DB를 사용한 단위 테스트는 더 이상 단위 테스트 자체가 아닙니다).

경고와 함께 무엇을 할 것입니까? 그게 합격인가 실패인가? 패스가되면이 경우 단위 테스트의 요점은 무엇입니까? 그것이 실패하면 ... 음 .. 그냥 실패하십시오.

단위 테스트를 수행하는 방법과 단위 테스트를 수행하는 방법을 파악하는 데 약간의 시간을 투자 할 것을 제안합니다. "단위 테스트"는 매우 다른 것들에 대해 많은 사람들이 사용하는 진부한 표현입니다.

1

질문에서 설명한대로 단위 테스트가 아닌 수용 테스트에 가깝습니다. 단위 테스트 프레임 워크는 빠르게 실패하도록 설계되었습니다. 이것이 Assert가 (그리고 좋은 일을하는) 방식대로 동작하는 이유입니다.

문제로 돌아가려면 Fitnesse와 같은 수용 테스트 프레임 워크를 사용해야합니다. 실패한 단계는 끝까지 실행을 계속합니다.
그러나 단위 테스트 프레임 워크를 사용해야하는 경우 수집 변수/매개 변수를 사용하여이 동작을 시뮬레이션하십시오. 예 :

  • 모든 실패한 단계 시험의 끝에서
  • 를 설명하는 오류 메시지가 추가 테스트 내에서 List<string> 유지는 수집 변수가 당신이 경우
1

비어 있음을 주장 Gallio/MbUnit을 사용하면 Assert.Multiple을 사용하여 원하는 것을 얻을 수 있습니다.실패한 단정을 포착하지만 즉시 테스트 실행을 중단하지는 않습니다. 실패한 주장은 모두 수집되어 나중에 테스트가 끝날 때보고됩니다.

[Test] 
public void MultipleAssertSample() 
{ 
    Assert.Multiple(() => 
    { 
     Assert.Fail("Boum!"); 
     Assert.Fail("Paf!"); 
     Assert.Fail("Crash!"); 
    }); 
} 

위 예제의 테스트는 분명히 실패했지만 흥미로운 점은 테스트 보고서에 3 가지 오류가 표시된다는 것입니다. 첫 번째 오류가 발생해도 실행이 중단되지 않습니다.

0

좀 더 의미있는 오류 보고서를 원했을 때 비슷한 문제가있었습니다. 나는 컬렉션을 비교하고 잘못된 요소 수를 얻는데 사용되었는데 실패의 진정한 이유는 무엇인지 알지 못합니다. 불행히도 필자는 수동으로 비교 코드를 작성 했으므로 모든 조건을 검사 한 다음 끝에 좋은 오류 메시지가 표시된 단일 어설 션을 수행합니다.

관련 문제