2010-07-28 7 views
8

Sto implementando la generazione di documenti di parole ms utilizzando i controlli di contenuto e OpenXML SDK. Mi piacerebbe avere alcuni test automatici per quel codice (test di unità o alcuni semplici test di automazione dell'interfaccia utente).Test automatico OpenXML SDK

Qualcuno ha esperienza nel testare la generazione di documenti in MS Word? Quali sono le opzioni possibili?

Grazie in anticipo!

+0

Perché il test dell'unità OpenXML deve essere diverso dallo standard. Stai provando a convalidare se il documento può aprirsi a parole o se andrà bene? –

+0

Non è diffrente, è solo tecnicamente difficile. Il test tipico è Arrange-Act-Assert. Quindi la domanda è: come possiamo fare facilmente l'ultima parte? Segnala. Forse usando un sistema di automazione di parole o di automazione dell'interfaccia utente, ma non vedo un modo semplice per farlo. Così finisco con i test che generano report e l'apertura in parole, quindi controllo manualmente se il report va bene. Non è un test unitario "puro", ma è meglio che eseguire l'app completa per generare rapporti necessari. Inoltre sono interessato al test del codice che funziona direttamente con Open XML, tutti gli altri pezzi che ho separato e testato con i soliti test unitari. – Andrii

risposta

5

No, non ho fatto test di unità di generazione di documenti di MS Word, ma come dice Ingó Vals, non dovrebbe essere diverso da qualsiasi altra forma di test di unità.

1) [Facoltativo: per assicurarsi di aver compreso l'uso corretto dell'SDK per le proprie esigenze]. Scopri come l'app dovrebbe guidare l'SDK. Scrivi degli script di test che imitano le funzionalità previste e assicurati che i documenti Word generati soddisfino le tue aspettative.

2) Creare un'interfaccia (o interfacce) che contenga metodi che corrispondono alla funzionalità necessaria per la generazione della documentazione. Nota: l'interfaccia non ha bisogno di offrire la piena funzionalità di OpenXML SDK - solo la funzionalità di cui hai bisogno per la tua applicazione.

3) Creare una concreta implementazione dell'interfaccia, che inoltra le chiamate al OpenXML SDK

4) utilizzano l'interfaccia è stato creato nella vostra applicazione per eseguire la generazione di documenti.

5) Utilizzare NUnit e NMock (o simile) per scrivere test di unità che guidano il livello di generazione dell'applicazione. Questi test dovrebbero utilizzare un'interfaccia fittizia, piuttosto che un'istanza dell'implementazione concreta. Ora puoi affermare nei tuoi test che il tuo livello di generazione si comporta come ti aspetti.

+0

Grazie per la risposta, ma il fatto è che sono interessato a testare il codice che manipola direttamente Open XML SDK. Tutto il resto posso separare o prendere in giro, questo è chiaro. L'utilizzo di mock che non conoscono effettivamente Open XML SDK non è di mio gradimento, poiché ciò che voglio testare è che il mio codice funziona correttamente con SDK. Qualcuno potrebbe obiettare che non si tratta di un puro test unitario, ma di ciò che manca nel mio attuale test. – Andrii

+1

Quello che ho descritto è unit test del codice. Chiamerei quello che vuoi un test di integrazione. In tal caso, suppongo che potresti ottenere l'SDK per l'output di Word XML e scrivere un metodo che confronta il DOM risultante con il DOM che ti aspetti. –

+0

Sì, unità o integrazione o automazione dell'interfaccia utente o cosa funzionerà. Per riassumere qualsiasi tipo di test automatizzato che consenta di fare la verifica (asserire parte del test). Controllerà il confronto DOM. Molte grazie! – Andrii

2

io sto facendo qualcosa di simile con l'OpenXML SDK per i fogli di calcolo e io in realtà solo scrivere OpenXML codice di api che si apre il file da una strea m allo scopo di testare. I test di unità non ti dicono veramente abbastanza dato che devi sapere se si tratta di un file valido.

// 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(); 
}