Saludos Stackoverflowers,Sockets de prueba de unidad
Tengo una aplicación en la que existe una capa de abstracción de comunicación. Cada aplicación en esta capa, llamada un conector, ofrece mi solicitud con un medio para el intercambio de datos con un compañero conectado (ej .: a través de HTTP, TCP sockets, sockets UDP, etc.).
Por ejemplo, tengo una clase que implementa Connector_Tcp
métodos tales como leen, escritura , abierta y estrecha .
Tengo que escribir una prueba unitaria para esa clase. Sé que las pruebas unitarias deberían tener menos dependencias como sea posible. Desafortunadamente, en ese caso, la dependencia es un recurso del sistema: un socket; y no puedo pasar por alto.
Necesito algunos consejos sobre cómo hacer para probar la unidad en esta clase.
En mi opinión, a pesar de que esta clase está utilizando un recurso del sistema, se debe comprobar que todos los otros conectores para asegurarse de que se respeta la norma establecida por mi solicitud.
Me preocupan cosas tales como colisiones vinculantes (Dirección ya en uso errores) y bloqueo. No quiero que la prueba de la unidad falle porque el puerto ya está siendo utilizado por un servicio del sistema que no tiene nada que ver con mi aplicación.
He hecho muchas pruebas unitarias en mis días, pero ninguna de ellas depende de un recurso de bajo nivel como son los zócalos.
Cómo haría usted para pruebas unitarias toma una clase dependiente? Abra un socket para cada unidad? Use una sola clase de servidor, luego un recurso de socket definido manualmente para conectarse y probar ...?
Creo que mi problema realmente es la siguiente:
Si la prueba de unidad no ... ¿cómo sé si:
- El socket ya está en uso por otro proceso;
- La prueba de la unidad está mal escrita; o
- El método se comporta de forma incorrecta (que es lo que vale la prueba de una unidad).
necesito la unidad de prueba para probar si el método se ha estado comportando correctamente o no ...
No he hecho ningún desarrollo de PHP real, pero ¿puedes crear una clase simulada que se deriva de tu clase de Socket? – Dave
@Dave: puedo. Yo uso objetos simulados para cada clase que requiere un conector. Mi problema aquí es: necesito probar la clase de socket para asegurarse de que respeta las convenciones de la capa de abstracción ... Al probar un objeto simulado, no me dice claramente si la clase de socket funciona o no. – netcoder
hay un límite práctico para lo que puede probar en mi opinión. No trataría de probar la unidad en el zócalo. Supongo que en su caso, dado que el socket podría ser accesible fuera de su aplicación, solo tiene que hacer lo mejor que pueda para escribir pruebas de unidad alrededor del conector y asegurarse de que maneje todas las condiciones excepcionales. Mencionaste los errores de "dirección ya en uso", así que una cosa que haría es asegurarme de que mi conector no haya muerto por esta condición. Haría una prueba unitaria para crear esta condición y asegurarme de que la atrape. – Dave