2010-06-13 2 views

답변

6

파일 이름 기반이 아닌 스트림 기반 API를 사용하면 인생이 훨씬 쉬워집니다. IMO를 조롱하는 것은 여기에별로 적합하지 않습니다. 당신은 "프로토콜 테스트"를하고 있지 않습니다 - 당신은 단지 데이터 소스를 원합니다.

또한 간단한 유틸리티 방법입니다 과부하 제공 할 수

public Result ParseXml(string file) 
{ 
    using (Stream stream = File.OpenRead(file)) 
    { 
     return ParseXml(stream); 
    } 
} 

을 당신 수 다음 방법은 합리적 안전하게 하지 테스트 - 그것은 결국, 거기에 의미있는 논리가 없습니다.

이제 수 I는 일반적으로 다음 코드에 하드 코딩 된 문자열을 사용하여 Encoding.UTF8.GetBytes(xml)를 호출하고 결과 바이트 배열 주위에 MemoryStream을 구축 ...하지만하여 스트림 기반의 API는 별도의 데이터 파일을 사용하는 것을 선호 테스트 내 테스트 프로젝트에서. 콘텐츠 형식을 "포함 된 리소스"로 설정 한 다음 Assembly.GetManifestResourceStream을 사용하여 테스트 파일에 대한 스트림을 가져옵니다.

이것이 진정한 XML 파일이라면, 정말로 자신을 파싱하고 싶습니까? 프레임 워크에두고 싶지 않은 이유가 있습니까? DOM API, LINQ to XML 또는 XmlReader과 관련하여 API를 표현 하시겠습니까?

+0

경로가 어떻게 작동하는지 혼란스럽게 여기는 사람은 다음과 같은 것 같습니다 :'Your.Project.Name.SubFolder.FileName.extension'. – crush

3

은 당신이 할 수있는 일은 읽고 어떤 파일 클래스를 말할 수있는 방법을 찾을 수 있습니다. 따라서 클래스가 어떻게 구현되는지에 따라 조금씩 다릅니다.

public class ClassToTest : IClassToTest 
{ 
    public Result ParseXml(Stream xml) 
    { 
     // Parse xml and return result. 
     return ...; 
    } 
} 

[Test] 
public void TestParseXml() 
{ 
    // Get xml stream to test from somewhere. 
    Stream xmlStream = ...; 

    // Call method to test. 
    var result = new ClassToTest().ParseXml(xmlStream); 

    // Assert results. 
    Assert.IsNotNull(result); 
    ... 
} 

아이디어는 어떻게 든 사용자가 만든 XML 파일로 테스트하는 클래스를 제공하고있는 당신이 기대하는 결과를 구문 분석 알고 있다는 것입니다 : 가장 쉬운 방법은 다음과 같이 될 것이다.

+0

파일 읽기를 확인하고 싶지 않습니다. 단지 단위 테스트를하고 싶습니다. 모의 제도가 어떻게 든 나를 도울 수 있습니까? –

+0

테스트 할 메소드 나 클래스의 코드를 제공 할 수 있습니까? –