2008-10-17 4 views
4

개체를 xml에 저장하는 savefile 메서드를 작성했습니다. 그러나 NUnit에서 메서드를 테스트하는 방법을 모르겠습니다. 수동으로 샘플 파일을 만들고 파일 사이의 문자열을 비교해야합니까? 방법을 테스트하는 더 좋은 방법이 있습니까?savefile 메소드 테스트를 위해 NUnit에 테스트 메소드를 작성하는 방법은 무엇입니까?

답장을 보내 주셔서 감사합니다.

+0

생성 된 xml을 구체적으로 확인하려는 경우에 대비하여 질문을 다시 입력 할 수 있습니다. XML 출력을 검증하는 테스트를 작성하는 방법은 무엇입니까? – Gishu

답변

0

내가하는 일은 다음과 같습니다. 나를 위해 작동하지만 사용자의 사양에 맞지 않을 수 있습니다.

해체 중에 내가 스위트의 일부로 만든 파일을 삭제했는지 확인합니다. 그렇습니다. 파일이 테스트 용 스크래치 파일인지 확인하십시오.

테스트 방법에서 파일이 있으면 삭제합니다 (해체는 이미 처리 한 것이 아니어야 함). 그런 다음 XML이 파일을 존재한다고 선언합니다. 그런 다음 파일을 객체 그래프 나 xml DOM으로 다시로드하고 필요한만큼의 어설 션을 통해 상태를 쿼리합니다.

파일 쓰기가 어려워 디자인에서 일반 텍스트 작성기 또는 xml 작성기로 작성할 수있는 경우 파일 저장을 무시하고 대신 문자열 작성기로 바꾸고 문자열을 쿼리하면됩니다. 훨씬 더 깨끗하지만 실제 파일 지속성이 작동하는지 테스트하지 않습니다.

1

어, 유효성을 검사하는 XML 출력. 지옥에 오신 것을 환영합니다.

나를 위해 일한 방법은 메모리에 XmlDocument 개체를 생성하는 것이 었습니다. 그런 다음 SaveFile 메서드를 실행하고 다른 XmlDocument에로드합니다. 모든 요소와 특성을 비교하여 두 XmlDocuments를 모두 반복적으로 탐색하십시오.

불행히도 C# 개체로 xml을 작성하는 것은 크고 부피가 커집니다. 한 번에 하위 섹션을 테스트하는 것이 좋습니다. 저장된 파일의 하위 요소는 <FileList>이고 하위 요소는 <Cups>이고 하위 요소는 <Rifles>입니다. 이 경우 전체 결과 대신 각 하위 섹션이 올바르게 수행되도록 일련의 테스트를 작성하십시오.

1

코드를 표시하면 더 쉬울 것입니다. 내 방식은이 추상화 계층을 추가하는 것입니다. Save 메서드를 XmlWriter와 직접 처리하지 마십시오. 대신 데이터의 작은 논리적 덩어리를 xml로 저장하고 테스트 할 수있는 래퍼를 만듭니다. 각각의 래퍼에 대한

void Persist(XmlWriter writer); 

같은 방법을 저장 단지 래퍼에서 데이터를 수집 할 수 있습니다. 즉, 데이터를 올바르게 저장하는 것은 래퍼의 책임이지만 각각의 데이터는 작은 부분만을 담당하게됩니다. 문자열을 비교하여 테스트 할 수 있습니다 (StringWriter를 Persist 메서드로 전달하는 XmlWriter에 넣음)

0

SaveFile (string fileName) 및 SaveFile (XmlWriter writer)을 갖도록 클래스를 디자인하십시오. SaveFile (string filename)은 명명 된 파일에 대해 XmlWriter를 만들고 SaveFile (writer) 만 호출하면됩니다. 모의 XmlWriter 사용할 수있는 SaveFile (XmlWriter 작성기) 메서드에 대한 광범위한 단위 테스트를 수행하십시오. SaveFile (string filename) 메소드에서 몇 가지 오류 조건을 테스트하십시오. 오류 처리에 따라 파일을 작성하지 않아도됩니다.

나는 원하지 않으면 직접 XmlWriter를 사용하여 메서드를 노출 할 필요가 없습니다.비공개로 만들고 접근자를 사용하여 테스트에서 호출 할 수 있습니다.

1

옵션 단순한

  1. : 사용 '골든 파일'접근 방식을. 읽기 전용 예상 출력 파일을 자원으로 작성하십시오. 바이트/문자열 현명한 비교는 실제 생성 된 파일과 비교합니다.
  2. 나는이 목적을 위해 어떤 사람들이 XmlUnit을 사용하는 것을 들었습니다. 개인적으로 사용하지는 않았지만 살펴볼만한 가치가 있습니다.
관련 문제