Mejor práctica: ¿Unidad que prueba un método que toma un Socket como argumento?

Estoy tratando de probar una clase de métodos que toman un objeto Socket en el que ambos leen y escriben. Me pregunto, ¿cuál es la mejor manera de hacer esto? Estoy trabajando en un equipo (este es un proyecto universitario) y solo soy responsable de esta clase (java), por lo que refactorizar completamente el código no es realmente una opción.

¿Hay algún tipo de socket simulado disponible, como un "Mocket", o algo así? ¿Cómo abordarías este problema?

Como mencioné, soy un estudiante universitario, así que espero aprender de la sabiduría del foro. Gracias por tomarte el tiempo para responder.

Respuesta 1

Para hacer que su código sea comprobable, las clases que dependen Socketdeben depender de la abstracción del socket, por ejemplo, una interfaz simple que expone los métodos que usa (como leer y escribir). Su aplicación usará wrapper alrededor de la Socketclase real , pero en la prueba de unidad podrá usar simulacros (verifique JMock para esto).

Considerar:

public interface ISocket
{
    byte[] read();
    int write(byte[] content);
}

public class SocketWrapper : ISocket
{
    // read and write methods simply delegate work to real socket
}

public class ClassToTest
{
    private ISocket socket;

    public ClassToTest(ISocket socket)
    {
        this.socket = socket;
    }
}

Ahora en su prueba de unidad puede crear simulacros ISockety pasarlos al ClassToTestconstructor. De esta manera, aísla la prueba unitaria de sus dependencias.

Respuesta: 2

Creo que primero debe declarar la interfaz del socket como:

public interface IClient{
 bool connect(...);
 bool disconnect(...);
 bool sendData(...);
}

Después de eso, cree una clase que implemente la interfaz. Esta clase contendrá un Socket.

En su clase donde necesita probar el código, pasará la interfaz del cliente y no una implementación concreta. De esta manera: 1) podrá intercambiar el comportamiento de su sistema sin ningún cambio en su clase probada. 2) podrá burlarse de su cliente con cualquier implementación que necesite, por lo que probará el código con mucha más facilidad que utilizando el socket como argumento.

Respuesta: 3

mi panel se ve así: cuando convierto a imagen pública BufferedImage createImage (panel JPanel) {int w = (int) PageSize.A4.getWidth (); // panel.getWidth (); int h = (int) PageSize.A4.getHeight (); // panel ....

Cuando entro en el panel de administración de Glassfish, voy a Aplicaciones y veo mi aplicación en la lista (llamada cmt). Cuando hago clic en Iniciar, se abre una pestaña con algunas URL. Hay algunos problemas con estas URL '...

Quiero establecer sesión abierta en el patrón de vista controlado por Spring. Estoy usando Hibernate 4.1.2. Ahora, si agrego spring-hibernate3 en pom.xml, eventualmente agrega su dependencia hibernate-3.2.5.ga. Creo que yo ...

Estoy creando una aplicación web con un servicio web de back-end tranquilo. Una de mis tablas es bastante independiente, es decir, filas a las que solo se hace referencia desde otra tabla de manera que pueda vivir felizmente ...