2009-06-02 16 views
5

¿Cómo puedo probar el siguiente método?¿Cómo puedo probar el código de unidad que crea un nuevo Proceso?

Es un método en una implementación de clase concreta de una interfaz.

He rellenado la clase Process con una interfaz que solo expone los métodos y propiedades que necesito. La clase ProcessWrapper es la implementación concreta de esta interfaz.

public void Initiate(IEnumerable<Cow> cows) 
    { 
     foreach (Cow c in cows) 
     { 
      c.Process = new ProcessWrapper(c); 
      c.Process.Start(); 
      count++; 
     } 
    } 

Respuesta

3

Hay dos formas de evitar esto. El primero es usar inyección de dependencia. Puede inyectar una fábrica y hacer que Initiate llame al método create para obtener el tipo de ProcessWrapper que necesita para su prueba.

La otra solución es utilizar un marco de burla como TypeMock, que le permitirá solucionar este problema. TypeMock básicamente le permite simular cualquier cosa, por lo que podría usarlo para proporcionar un objeto simulado en lugar de las instancias reales de ProcessWrapper.

+0

Estoy usando Moq pero no estoy seguro de cómo me burlaría de él. ¿Cómo lo harías en TypeMock? – Schotime

+0

TypeMock es único en el sentido de que modifica el IL, lo que le permite simular entidades que de otro modo no se podrían burlar. Todavía recomendaría el enfoque de inyección primero, pero si eso no es posible de alguna manera, podrías mirar TypeMock. –

0

¿Qué hace su proceso? ¿Hay alguna forma de que puedas comprobar que está haciendo lo que se supone que debe hacer? Por ejemplo, podría escribir en un archivo o una tabla de base de datos. O podría exponer una API (IPC, servicio web, etc.) que podría intentar llamar con datos de prueba.

Desde una perspectiva TDD, podría tener sentido conectar un "proceso de simulacro/prueba" que realice alguna acción que pueda verificar fácilmente. (Esto puede requerir cambios de código para permitir que su código de prueba inyecte algo). De esta manera, solo está probando su código de invocación y no necesariamente probando un proceso comercial real. Luego podría tener diferentes pruebas de unidad para probar su proceso comercial.

+0

Comienza un nuevo 'Proceso'. – Schotime

+0

Quiero decir, ¿qué hace tu subproceso? ¿Hay alguna manera de verificar que su subproceso está haciendo lo que se supone que debe hacer? –

+0

El subproceso ejecuta un nuevo Proceso .. ej. ejecuta otro programa con argumentos que hace todo el trabajo. Más tarde solo compruebo si ha terminado. – Schotime

0

No estoy familiarizado con C# (prefiero el mío sin hash), pero necesita algún tipo de interfaz para el proceso (IPC o el método más conveniente) para poder enviar solicitudes de prueba y obtener resultados espalda. En el nivel más simple, simplemente enviaría un mensaje al proceso y recibiría el resultado. O podría tener más granularidad y enviar comandos más específicos de su arnés de prueba. Depende de cómo hayas configurado tu entorno de pruebas unitarias, más precisamente cómo envías los comandos de prueba, cómo los recibes y cómo informas los resultados.

Yo personalmente tendría un objeto de prueba dentro del proceso que simplemente recibe, ejecuta & informa los resultados de la prueba de unidad y tiene el código de prueba dentro de ese objeto.

Cuestiones relacionadas