Pregunta

.NET Framework:2.0 Idioma Preferido:C#

Soy nuevo en TDD (Test Driven Development).

Primero de todo, es la prueba de unidad de Servicio de Windows?

Servicio de Windows clase se deriva de ServiceBase, que tiene métodos reemplazables,

  1. OnStart
  2. OnStop

¿Cómo puedo activar los métodos para ser llamado como si de la prueba de unidad es un servicio que llama a los métodos en el orden correcto?

En este punto, estoy aún haciendo una prueba de Unidad?o un test de Integración?

He mirado en servicio WCF pregunta, pero no tenía ningún sentido para mí, ya que nunca he tratado con servicio de WCF.

¿Fue útil?

Solución

Probablemente me recomienda el diseño de tu aplicación para que el "OnStart" y "OnStop" reemplaza en el Servicio de Windows acaba de llamar a métodos en una clase de la biblioteca de la asamblea.De esa manera usted puede automatizar las pruebas de unidad en contra de la biblioteca de clases de métodos, y el diseño también resúmenes de la lógica de negocios de la implementación de un Servicio de Windows.

En este escenario, las pruebas de la "OnStart" y "OnStop" métodos de sí mismos en un Servicio de Windows contexto sería entonces un test de integración, no es algo que se podría automatizar.

Otros consejos

Tengo pruebas unitarias de servicios de windows, por que no pruebas el servicio directamente, sino las pruebas de lo que hace el servicio.

Normalmente puedo crear una asamblea para el servicio y otro para lo que hace el servicio.Luego escribo unidad de pruebas en contra de la segunda asamblea.

Lo bueno de este método es que su servicio es muy delgada.Básicamente todo lo que hace es llamar a los métodos para hacer el trabajo correcto en el momento adecuado.Su ensamblaje contiene toda la carne de la obra a su servicio que se pretende hacer.Esto hace que sea muy fácil para probar y fácil de reutilizar o modificar según sea necesario.

Me gustaría empezar aquí.Se muestra cómo iniciar y detener los servicios de C#

Un ejemplo para empezar es es

public static void StartService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  }
  catch
  {
    // ...
  }
}

También he probado los servicios principalmente a través de la aplicación de consola, simulando lo que el servicio iba a hacer.De esa manera mi unidad de prueba es completamente automatizado.

Me gustaría utilizar el servicio de windows de la clase (en el que se ejecutan al iniciar/detener el servicio) como una especie de proxy para su sistema real.No veo cómo el código detrás de su servicio debe ser diferente de cualquier otra programación.El onStart y onStop métodos son simplemente eventos se desencadena, como apretar un botón en una interfaz gráfica de usuario.

Por lo que su windows de la clase de servicio es muy delgada y de clase, comparable a un formulario windows forms.Se llama la lógica de negocio/dominio de la lógica, de la que luego se hace lo que se supone que debe hacer.Todo lo que tienes que hacer es asegurarse de que el método(s) que usted está pidiendo en su onStart y onStop están trabajando como se les supone.Al menos eso es lo que yo haría ;-)

El diseño de la prueba es una buena estrategia, ya que muchas de las respuestas señalan recomendando que su OnStart y OnStop métodos de estar muy delgada por la delegación a los objetos de dominio.

Sin embargo, si las pruebas necesitan para ejecutar los métodos de servicio por alguna razón, usted puede utilizar un código como este para llamar desde dentro de un método de prueba (llamada OnStart en este ejemplo):

serviceInstance.GetType().InvokeMember("OnStart", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, serviceInstance, new object[] {new string[] {}});

Ventana de prueba de servicio de energía automática apagado, apague condiciones Ventana de prueba de servicio de la red desconectado, conectado La prueba de la ventana de la opción de servicio de inicio automático, manual, etc

Chico probablemente la mejor respuesta.

De todos modos, si usted realmente desea, puede invocar en la prueba de la unidad de estos dos método descrito por Documentación de MSDN pero, ya que están protegidos, usted necesitará utilizar la Reflexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top