2010-12-29 5 views
3

주어진 문제 :단위 테스트 .... 데이터 제공 업체입니까?

  • 나는 단위 테스트를 좋아한다.
  • 저는 C++ 라이브러리를 사용하는 외부 시스템에 연결성 소프트웨어를 개발합니다.
  • 이 시스템의 반환은 비 결정적입니다. 실행 중에 데이터를 수신하지만 올바르게 해석되었는지 확인하는 것은 어렵습니다.

어떻게 제대로 테스트 할 수 있습니까?

연결을 수행하는 단위 테스트를 실행할 수 있습니다. 슬프게도, 그러면 삶의 데이터 스트림을 처리합니다. 연결을 끊기 전에 30 초 또는 60 초 동안 테스트를 실행한다고 말할 수 있지만 코드 ccoverage를 얻는 것은 불가능합니다. 모든 코드 경로를 하루에 한 번씩 얻을 수는 없습니다 (오류 코드 경로는 거의 실행되지 않습니다). 나는 모든 결과를 주장 할 수도 없다. 하루 중 시간에 따라 우리는 초당 20.000 데이터 콜백을 말합니다.이 모든 것은 일관성을 위해 각각의 데이터를 검증 할만큼 충분하다고 판단되지 않습니다. 조롱? 왜냐하면 이벤트를 처리하는 코드는 기본적으로 테스트 된 케이스이기 때문에, 나는 Csharp에서 Csharp로 통합하는 조롱하는 프레임 워크를 갖기가 어려운 복잡한 C 레벨 구조를 여기에서 이야기합니다. C++

아무쪼록? 나는 어플리케이션의이 부분에 대해 단위 테스트를 사용하는 것을 포기할만큼 부족하다.

답변

3

단위 테스트는 좋지만 버그에 대한 유일한 무기는 아닙니다. the difference between unit tests and integration tests을 살펴보십시오. 후자가 가장 좋은 선택 인 것처럼 들립니다.

또한 자동 테스트 (단위 테스트 및 통합 테스트)는 시스템의 동작이 변경되지 않는 경우에만 유용합니다. 모든 릴리스와의 호환성을 이전 버전과 비교하면 자동으로 해당 기능을 테스트해도 도움이되지 않습니다.

how much unit testing is too much에 대한 이전 토론을 볼 수도 있습니다.

+0

나는 이것을 대답으로 생각한다. 이 커넥터에 대한 테스트 프로젝트를 삭제했으며 프로파일 러에서 실행할 수있는 테스트 응용 프로그램을 작성하여 수동으로 접근합니다. – TomTom

0

외부 데이터 소스가 인터페이스를 구현합니까? 또는 인터페이스를 구현하는 데이터 소스 주변의 래퍼와 인터페이스의 조합을 사용하여 테스트중인 클래스를 데이터 소스에서 분리 할 수 ​​있습니까? 이 중 하나라도 사실이라면 단위 테스트에서 데이터 소스를 조롱하고 mock 인스턴스의 데이터를 제공 할 수 있습니다. 테스트 대상 클래스 이제

public interface IDataSource 
{ 
    public List<DataObject> All(); 
    ... 
} 

public class DataWrapper : IDataSource 
{ 
    public DataWrapper(RealDataSource source) 
    { 
     this.Source = source; 
    } 

    public RealDataSource Source { get; set; } 

    public List<DataObject> All() 
    { 
      return this.Source.All(); 
    } 
} 

은 인터페이스에 따라 다음 단위 테스트에서 인터페이스를 구현하는 모의 인스턴스를 제공, 인스턴스를 주입.

public void DataSourceAllTest() 
{ 
    var dataSource = MockRepository.GenerateMock<IDataSource>(); 
    dataSource.Expect(s => s.All()).Return(... mock data ...); 

    var target = new ClassUnderTest(dataSource); 

    var actual = target.Foo(); 

    // assert something about actual 

    dataSource.VerifyAllExpectations(); 
} 
+0

그들 중 "하나"가 없습니다 - 여러 개가 있습니다. 대부분이 C stle 라이브러리로 제공되며, 하나는 헤더 파일이있는 일반 dll입니다. 전체 아이디어는 그들과의 상호 작용이 작동하는지 테스트하는 것이므로, 방법이 있다고하더라도 대체 할 수 있는지 확실하지 않습니다. 테스트 결과와 관련이 없다면 어떻게 작동하는지 잘 알 수 있습니까? – TomTom

+0

테스트 할 실제 기능을 조롱 할 수 있다고 생각하지 않습니까? – TomTom

+0

@TomTom - 단위 테스트와 통합 테스트에는 차이가 있습니다. 단위 테스트에서는 종속성을 조롱하고 싶습니다. 코드를 테스트하고 예상 된 (예상하지 못한) 입력 하에서 만 작동하는지 확인하려고합니다. 통합 테스트에 대해 말하는 것 같습니다. 그것도 필요합니다. 의존성을 조롱하지 않아도됩니다.하지만 코드를 광범위하게 테스트 할 필요는 없으며 상호 작용의 샘플 만 테스트 할 수도 있습니다.단위 테스트는 코드가 정상적인 경우와 모서리가 맞는지 확인해야합니다. – tvanfosson

관련 문제