首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在eclipse中运行多个java main方法

在eclipse中运行多个java main方法
EN

Stack Overflow用户
提问于 2010-02-03 12:22:34
回答 5查看 22.2K关注 0票数 14

我正在运行Eclipse3.5,我有一个常见的问题,为了测试我的程序,我必须点击大约6-7次,而不是一次点击播放按钮。

问题是我正在编写网络应用程序,因此我有一个“服务器”的运行配置和一个“客户端”的运行配置。然后,为了测试我的程序,我必须启动服务器,然后启动一个客户端,然后再启动另一个客户端等等。有没有什么方法可以将这些自动化到一个运行配置中?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-03 12:44:11

您可以直接调用任何类的main方法。例如,如果您有Server和client类,并且想要运行一个服务器和两个客户端,则可以这样做。

代码语言:javascript
运行
复制
public class Server {
    public void main(final String ... $Args) {
         final Server S = new Server();
         S.config($Args);
         S.run();
    }
}

public class Client {
    public void main(final String ... $Args) {
         final Client C = new Client();
         C.config($Args);
         C.run();
    }
}

public class Test_ServerClient {
    public void main(final String ... $Args) {
         Server.main('server1.cfg');
         Client.main('client1.cfg');
         Client.main('client2.cfg');
    }
}

完成了!

嗯,差不多吧。您可能希望在调用客户端的main之前进行一些延迟,以确保服务器已启动并正常运行。

不过,其中一个人认为。所有服务器和客户端都将在同一个JVM上运行。在大多数情况下(您只想测试它的交互,而与类加载无关,因为当它们在/不在同一个JVM上时,它们的行为会不同),这应该是可以的。如果您确实想让它在不同JVM上运行,那么可以使用Ant来运行它们。

如下所示:

代码语言:javascript
运行
复制
<project name="TestServerClient" default="test" basedir=".">
  <target name="test">
       <java classname="my.Server">
         <arg value="server1.cfg"/>
         <classpath>
           <pathelement location="dist/test.jar"/>
           <pathelement path="${java.class.path}"/>
         </classpath>
       </java>
       <java classname="my.Client">
         <arg value="client1.cfg"/>
         <classpath>
           <pathelement location="dist/test.jar"/>
           <pathelement path="${java.class.path}"/>
         </classpath>
       </java>
       <java classname="my.Client">
         <arg value="client2.cfg"/>
         <classpath>
           <pathelement location="dist/test.jar"/>
           <pathelement path="${java.class.path}"/>
         </classpath>
       </java>
  </target>
</project>

所以你可以运行这只蚂蚁,仅此而已。

希望这能有所帮助。

票数 16
EN

Stack Overflow用户

发布于 2011-07-05 00:39:33

只需完成验证答案:如果您希望并行执行服务器和客户端,则需要为每个客户端和服务器实例启动一个新线程。您可以执行以下操作:

代码语言:javascript
运行
复制
pulic class Test_ServerClient {
    public static void main(final String[] args) {

        Thread serverThread = new Thread() {
            public void run() {
                Server.main(args);
            }
        };

        Thread clientThread = new Thread() {
            public void run() {
                Client.main(args);
            }
        };

        serverThread.start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        clientThread.start();
    }
}

public class Server {
    public static void main(final String[] args) {...}
}

public class Client {
    public static void main(final String[] args) {...}
}
票数 2
EN

Stack Overflow用户

发布于 2010-02-03 12:37:40

那么,为什么不使用JUnit编写一个测试用例呢?我是说,

  • 准备两个属性文件,一个用于服务器,另一个用于客户端
  • 编写一个测试装置,它将启动一个服务器和多个客户端,以便运行测试
  • ,然后基于该

编写测试用例

我知道我们不应该称它为单元测试,因为它将依赖于网络IO。所以,只要你觉得合适就叫它吧。我的建议就是使用JUnit来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2189684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档