gpt4 book ai didi

java - 如何在 JUnit 测试中的不同线程中启动 Main.main()

转载 作者:行者123 更新时间:2023-12-02 09:34:37 25 4
gpt4 key购买 nike

如何启动一个单独的线程来从 Junit 测试中运行项目的主类?

我有一个实例化 Servidor() 的主类,它最终监听套接字连接,并且工作正常。

主要内容如下:

public class Main {
public static void main(String[] args){
try{
Servidor servidor = new Servidor();
servidor.start();
}catch(Exception ex){
MyUtils.handle(ex);
}
}
}

这是Servidor():

public class Servidor extends javax.swing.JPanel {
private static final int PUERTO = 2020;
private boolean running = false;

void start() throws Exception{
try ( ServerSocket servidor = new ServerSocket(PUERTO) ){
running = true;
String info = String.format("Listening@%s:%s",InetAddress.getLocalHost().getHostAddress(),PUERTO);
System.out.println(info);
while (running)
new ReceptorPedidosReplicacion(servidor.accept());
System.out.println("Server Stopped");
}
}

void stop(){
running = false;
}
}

但是,我设计了以下 Junit 测试,正如预期的那样,只要我的项目在后台运行,它就可以正常工作:

public class ServidorTest {
@Test
public void testSendPedido() throws Exception{
MySerializableObject pedido = new MySerializableObject();
Socket cliente = new Socket("127.0.0.1", 2020);
ObjectOutputStream out = new ObjectOutputStream(cliente.getOutputStream());
out.writeObject(pedido);
}

}

所以我想做的是能够做这样的事情:

    @Test
public void testSendPedido() throws Exception{
Main.main(); //Option1
new Servidor().start(); //Option 2

MySerializableObject pedido = new MySerializableObject();
Socket cliente = new Socket("127.0.0.1", 2020);
ObjectOutputStream out = new ObjectOutputStream(cliente.getOutputStream());
out.writeObject(pedido);
}

然而,这两个选项都不起作用,因为 Servidor() 劫持了执行线程,并且测试永远不会越过这些行。

最佳答案

通过使 Servidor() 实现 Runnable 并从 Junit 启动不同的线程来解决这个问题。但是,我不确定 Junit 是否会安全地处理此类新线程。我猜只要 Servidor 没有关键状态变化,我就会没事。不过,我愿意接受更好的解决方案。

public class Servidor extends javax.swing.JPanel implements Runnable{
...
public void run(){start()}
}

所以测试看起来像这样

@Test
public void testSendPedido() throws Exception{
Thread thread = new Thread(new Servidor());
thread.start();
...
}

关于java - 如何在 JUnit 测试中的不同线程中启动 Main.main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57640323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com