2010-07-01 3 views
2

csv 파일의 존재 여부에 의존하는 단위 테스트가 많이 있습니다. 이 파일이 분명히 존재하지 않으면 예외를 throw합니다.CSV 파일을 찾을 수없는 경우 장치 테스트 건너 뛰기

조건부로 테스트를 건너 뛸 수있는 Gallio/MbUnit 메소드가 있습니까? 나는 쉬운 방법은 바로 바로 테스트하는 경우에 어떤 코드를 실행하는 것입니다 테스트의 시작에서 경우 조건을 포함하는 것입니다 갈 리오 3.1을 실행하고 CsvData이

[Test] 
[Timeout(1800)] 
[CsvData(FilePath = TestDataFolderPath + "TestData.csv", HasHeader = true)] 
public static void CalculateShortfallSingleLifeTest() 
{ 
    . 
    . 
    . 

감사

+1

이 테스트를 삭제 그들이 파일이 없거나 얻을 경우 – Grzenio

+3

을 당신이 여기에있는 것은 아니다 "생략"자동으로 할 수있는 경우를 가지고있는 점은 무엇입니까? 단위 테스트는 통합 테스트입니다. 두 테스트의 차이점은 테스트가 성공하는지 여부는 테스트중인 실제 코드에 의존하지 않습니다. 그러나 외부 환경 요인에 따라 달라질 수 있습니다. csv 파일을 읽지 못하게 할 방법이 없습니까? 아니면 실제로 파일 시스템을 테스트하고 있습니까? –

답변

7

this question의 답변에 따르면 파일이 누락 된 경우 Assert.Inconclusive을 호출하는 TestDecoratorAttribute을 새로 만들어야합니다.

Assert.Inconclusive은 테스트가 통과했거나 실패했다는 말을하기 때문에 상황에 매우 적합합니다. 당신은 단지 그것이 현재의 상태에서 실행될 수 없다는 것을 말하는 것입니다.

2

속성 사용하고 있습니다 CSV 파일을 찾을 수 있습니다.

물론 이것은 실제로 실행되지 않고 아무 것도 주장하지는 않았지만 테스트는 녹색이라는 큰 단점이 있습니다.

비록 내가 외부 조건에 크게 의존하는 단위 테스트를 가지고 있다면 그들은 Grzenio에 동의하지만, 그들은 당신을 정말로 돕지 않습니다. 이 시나리오에서는 단위 테스트가 성공적으로 실행되었는지 또는 건너 뛰었는지 전혀 알 수 없으므로 실제로 단위 테스트가 모순됩니다.

개인적으로 필자는 파일이 없을 때 제대로 실패하지 않도록 테스트를 작성합니다. 실패 할 경우 단위 테스트가 실행되는 시스템에서 해당 파일을 사용할 수 있어야한다는 표시기입니다. 이 경우 수동으로 조정해야 할 수도 있지만 (파일을 컴퓨터 또는 서버로 가져 오는 경우) 신뢰할 수있는 단위 테스트가 있습니다.

4

여기에있는 것은 단위 테스트가 아닙니다. 단위 테스트는 코드의 단일 단위를 테스트합니다 (크기는 클 수 있음). 파일 또는 네트워크 연결과 같은 외부 환경 요인에 의존하지 않습니다.

여기 파일에 따라 다르므로 통합 테스트가 필요합니다. 코드가 코드 제어 밖에있는 무언가 (이 경우 파일 시스템)와 안전하게 통합되는지 여부를 테스트하고 있습니다.

실제로 이것이 통합 테스트 인 경우 실제로 테스트하려는 것을 테스트하도록 테스트를 변경해야합니다.

CSV 구문 분석을 테스트하는 등의 단위 테스트로 계속 생각 중이라면 CSV 파일의 실제 읽기를 조롱하거나 스눕/위조 할 수 있도록 코드를 리팩터링합니다. 내용. 이렇게하면 외부 파일에 의존하지 않고 CSV 파서에 테스트 데이터를보다 쉽게 ​​제공 할 수 있습니다.

예를 들어

, 당신은 생각해야한다 :

  • 안티 바이러스 패키지는 당신에게 TortoiseSVN이 같은 파일
  • 전형적인 프로그래머 도구에 즉시 액세스 권한을 부여하지 않을 수 있습니다, 때로는에 개최하는 것이 탐색기로 쉘 오버레이를 통합 너무 오랫동안 파일에 저장하고 항상 프로그램에 파일에 대한 액세스 권한을 부여하지는 않습니다 (파일을 삭제하고 새로운 파일로 덮어 쓰려고합니까? 물론 삭제를 먼저 처리하도록하겠습니다.하지만 프로그램이 있습니다. 파일을 잡고 있기 때문에 시간이 좀 걸릴 수 있습니다 ...)
  • 파일이 실제로 (그 이유는 무엇입니까?)
  • 당신 수도없는 당신은 이전 디버깅 세션에서 남은 (잘못된 파일 내용이있을 수 있습니다 경로
  • 에 대한 읽기 액세스 할 수 있습니다?)
  • 이되지 않을 수도 있습니다

일단 파일 시스템, 네트워크 연결 등과 같은 외부 시스템을 사용하기 시작하면 잘못 될 수있는 많은 것들이 있습니다. 기본적으로 취할 수있는 테스트입니다.

내 조언 : 테스트하려는 내용 (파일 시스템? CSV 구문 분석기)을 파악하고 그 목표와 충돌하는 종속성을 제거하십시오. Gallio/MbUnit에서

+0

이 테스트는 다른 단위 테스트와 중복되지만 csv 파일을 사용하여 테스트에 수천 개의 행 데이터를 제공합니다. 그래서 누군가 실수로 파일을 옮기거나 삭제하면 코드가 게시되는 것을 원하지 않는 이유입니다. – Longball27

+0

읽을 필요가있는 별도의 실제 파일 대신 데이터를 테스트 프로젝트의 리소스에 배치 할 수 없었습니까? –

1

는 추상적 인 ContentAttribute과 그 구체적인 파생 유형 (예 : [CsvData] 열거 나 파일 데이터 소스를 읽는 동안 오류의 경우에 발생 시험의 기본 결과를 변경할 수있는 새로운 선택적 매개 변수를 V3.2 . (. 심판 issue 681)의 구문은 다음

[Test] 
[CsvData(..., OutcomeOnFileError = OutcomeOnFileError.Inconclusive)] 
public void MyTestMethod() 
{ 
    // ... 
}