2010-07-28 5 views
8

콘텐츠 컨트롤과 OpenXML SDK를 사용하여 ms 워드 문서 생성을 구현하고 있습니다. 그 코드 (단위 테스트 또는 몇 가지 쉬운 UI 자동화 테스트)에 대한 자동화 된 테스트를하고 싶습니다.자동화 된 테스트 OpenXML SDK

누구든지 MS Word 문서 생성을 테스트하는 데 경험이 있습니까? 가능한 옵션은 무엇입니까?

미리 감사드립니다.

+0

왜 OpenXML 단위 테스트가 표준과 다를 수 있습니까? 문서를 단어로 열 수 있는지 또는 괜찮아 보이는지 확인하려고합니까? –

+0

그것은 다르지 않습니다, 단지 기술적으로 어려움입니다. 일반적인 테스트는 Arrange-Act-Assert입니다. 그래서 문제는 어떻게 우리가 마지막 부분 인 Assert를 쉽게 할 수 있는가입니다. 아마도 일부 단어 자동화 또는 UI 자동화 프레임 워크를 사용하지만이 작업을 수행하는 쉬운 방법은 없습니다. 따라서 보고서를 작성하고 단어로 여는 테스트를 수행하므로 보고서가 정상적으로 작동하는지 수동으로 확인합니다. "순수한"단위 테스트는 아니지만 필요한 보고서를 생성하기 위해 전체 앱을 실행하는 것보다 낫습니다. 또한 저는 Open XML과 직접적으로 작동하는 테스트 코드에서 intrested를했습니다. 다른 모든 조각들은 분리되어 일반 단위 테스트로 테스트되었습니다. – Andrii

답변

5

아니요, MS Word 문서 생성에 대한 단위 테스트를 수행하지 않았지만 Ingó Vals이 말한 것처럼 다른 형식의 단위 테스트와 다를 수 없습니다.

1) [선택 사항 - 필요에 따라 SDK의 올바른 사용법을 이해하기 위해] 앱에서 SDK를 어떻게 움직여야하는지 알아보십시오. 의도 한 기능을 모방 한 테스트 스크립트를 작성하고 작성한 Word 문서가 사용자의 기대에 부합하는지 확인하십시오.

2) 설명서 생성에 필요한 기능에 해당하는 메서드가 포함 된 하나 이상의 인터페이스를 만듭니다. 참고 : 인터페이스는 OpenXML SDK의 모든 기능을 제공 할 필요는 없으며 응용 프로그램에 필요한 기능 만 제공합니다.

3)는의 OpenXML SDK

4) 활용에 대한 호출이 문서 생성을 수행하는 응용 프로그램에서 만든 인터페이스를 전달하여 인터페이스의 구체적인 구현을 작성합니다.

5) NUnit과 NMock (또는 유사)을 사용하여 응용 프로그램의 생성 계층을 구동하는 단위 테스트를 작성하십시오. 이러한 테스트는 구체적인 구현의 인스턴스가 아닌 조롱 된 인터페이스를 사용해야합니다. 이제 테스트에서 생성 레이어가 예상대로 작동하는지 확인할 수 있습니다. OPENXML SDK 2.0 유효한 코드에 대한

+0

답변을 주셔서 감사합니다.하지만, Open XML SDK를 직접 조작하는 코드를 테스트 할 때 intrested라는 것이 있습니다. 나머지는 모두 분리하거나 조롱 할 수 있습니다. 모의 객체 사용 실제로 Open XML SDK를 호출하는 insdead는 내 마음에 들지 않습니다. 테스트하려는 것은 내 코드가 SDK에서 잘 작동한다는 것입니다. 누군가는 순수한 단위 테스트가 아니라 현재 테스트에서 실제로 빠진 것이 무엇인지 논할 수 있습니다. – Andrii

+1

제가 설명한 것은 코드를 단위 테스트하는 것입니다. 나는 당신이 통합 테스트를 원하는 것을 부를 것입니다. 어떤 경우에는 SDK를 사용하여 Word XML을 출력하고 결과 DOM을 원하는 DOM과 비교하는 메서드를 작성할 수 있습니다. –

+0

예, 단위 또는 통합 또는 UI 자동화 또는 작동 할 것입니다. 검증을 수행 할 수있는 자동 테스트의 모든 유형을 Sumarrize하려면 (테스트의 일부인 Assert). DOM 비교를 검사합니다. 고마워요! – Andrii

2

실제로 스프레드 시트에 대한의 OpenXML SDK와 비슷한 일을하고 있는데 실제로 단지에서 파일을 엽니의 OpenXML API 코드를 작성하지 말한다 스트라 테스트 목적으로. 단위 테스트는 그것이 유효한 파일인지 알아야하기 때문에 충분히 알려주지 않습니다.

// There should be a sheet for every team 
[TestMethod] 
[HostType("Moles")] 
public void CaseExportTeamSheetsTest() 
{ 
    IRepository<ServiceTbl, ServiceTbl> ServiceRepository; 
    CaseController target; 
    BuildCaseControllerMoledCases(out ServiceRepository, out target); 
    FileStreamResult actual = target.Export(); using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(actual.FileStream, false)) 
    { 
     var services = ServiceRepository.All; 

     foreach (var item in services) 
     { 
      // get a worksheet foreach service 
      var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == item.ServiceName); 
      Assert.IsTrue(sheets.Count() > 0); 
     } 
    } 

    actual.FileStream.Close(); 
    actual.FileStream.Dispose(); 
}