2010-07-28 22 views
8

Estoy implementando la generación de documentos de ms palabras usando controles de contenido y OpenXML SDK. Me gustaría tener algunas pruebas automatizadas para ese código (pruebas unitarias o algunas pruebas de automatización fáciles de UI).Prueba automatizada SDK de OpenXML

¿Alguien tiene experiencia en probar la generación de documentos de MS Word? ¿Cuáles son las posibles opciones?

¡Gracias de antemano!

+0

¿Por qué las pruebas de unidad OpenXML tienen que ser diferentes de las estándar? ¿Estás tratando de validar si el documento puede abrirse en palabras o si se verá bien? –

+0

No es diferente, es técnicamente difícil. La prueba típica es Arrange-Act-Assert. Entonces la pregunta es ¿cómo podemos hacer fácilmente la última parte? Afirmar. Posiblemente usando alguna automatización de palabras o un marco de automatización de UI, pero no veo una manera fácil de hacer esto. Por lo tanto, termino con las pruebas que generan el informe y la apertura en word, por lo que verifico manualmente si el informe está bien. No es una prueba de unidad "pura", pero es mejor que ejecutar la aplicación completa para generar los informes necesarios. También estoy interesado en el código de prueba que funciona directamente con Open XML, todas las demás piezas que he separado y probado con las pruebas unitarias habituales. – Andrii

Respuesta

5

No, no he hecho pruebas unitarias de la generación de documentos de MS Word, pero, como dice Ingó Vals, no debería ser diferente de cualquier otra forma de prueba unitaria.

1) [Opcional: para garantizar que comprende el uso correcto del SDK según sus necesidades]. Descubra cómo su aplicación debe conducir el SDK. Escriba algunos scripts de prueba que imiten la funcionalidad prevista y asegúrese de que los documentos de Word que generan satisfacen sus expectativas.

2) Cree una interfaz (o interfaces) que contenga métodos que correspondan a la funcionalidad que necesita para la generación de su documentación. Nota: la interfaz no necesita ofrecer la funcionalidad completa del SDK OpenXML, solo la funcionalidad que necesita para su aplicación.

3) Crear una aplicación concreta de la interfaz, que reenvía las llamadas a la SDK OpenXML

4) Utilizar la interfaz que ha creado en su aplicación para llevar a cabo la generación de documentos.

5) Use NUnit y NMock (o similar) para escribir pruebas de unidad que manejan la capa de generación de su aplicación. Estas pruebas deben usar una interfaz simulada, en lugar de una instancia de la implementación concreta. Ahora puede afirmar en sus pruebas que su capa de generación se comporta como espera.

+0

Gracias por la respuesta, pero la cuestión es que estoy interesado en probar el código que manipula directamente Open XML SDK. Todo lo demás que puedo separar o burlar, eso está claro. No es de mi agrado el uso de simulacros para no llamar realmente a Open XML SDK, ya que lo que quiero probar es que mi código funciona bien con SDK. Alguien puede argumentar que no es una prueba de unidad pura, sino que lo que está realmente falta en mi prueba actual. – Andrii

+1

Lo que describí es prueba unitaria de tu código. Llamaría a lo que quiera una prueba de integración. En cuyo caso, supongo que se podría obtener el SDK a la salida XML de Word y escribir un método que compara el DOM resultante con el DOM esperas. –

+0

Sí, unidad o integración o automatización de la interfaz de usuario, o lo que va a trabajar. Para sumarrize cualquier tipo de prueba automatizada que permitirá hacer la verificación (Assert parte de la prueba). Comprobará la comparación DOM. ¡Muchas gracias! – Andrii

2

de hecho, estoy haciendo algo similar con el SDK OpenXML para hojas de cálculo y que en realidad sólo escribir código API OpenXML que abre el archivo desde un strea m con el propósito de probar. Las pruebas unitarias realmente no le dicen suficiente ya que necesita saber si es un archivo válido.

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