Запустите несколько основных методов Java в Eclipse - PullRequest
14 голосов
/ 03 февраля 2010

Я использую Eclipse 3.5, и у меня часто возникает проблема, заключающаяся в том, что для тестирования моей программы мне нужно сделать около 6-7 нажатий, а не один щелчок по кнопке воспроизведения.

Проблемая пишу сетевое приложение и, таким образом, у меня есть конфигурация запуска для «Сервера» и конфигурация запуска для «Клиента».Затем, чтобы протестировать мою программу, я должен запустить сервер, затем клиент, затем другой клиент и т. Д. Есть ли способ автоматизировать это в конфигурации с одним прогоном?

Ответы [ 5 ]

16 голосов
/ 03 февраля 2010

Вы можете вызвать метод main любого класса напрямую. Например, если у вас есть класс Server и Client и вы хотите запустить один сервер и два клиента, вот что вы можете сделать.

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');
    }
}

Готово! * * 1004

Ну, почти. Возможно, вы захотите сделать некоторую задержку перед вызовом основного клиента, чтобы убедиться, что сервер работает и работает правильно.

Можно подумать, хотя. Все Сервер и Клиенты будут работать на одной JVM. В большинстве случаев (если вы просто хотите проверить его взаимодействие и не иметь ничего общего с загрузкой классов, поскольку это будет вести себя по-разному, когда они находятся / не находятся на одной и той же JVM), это должно быть хорошо. Если вы действительно хотите, чтобы он работал на другой JVM, вместо этого вы можете использовать Ant.

Примерно так:

<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>

Так что вы можете просто запустить этого муравья и все.

Надеюсь, это поможет.

2 голосов
/ 04 июля 2011

Просто для завершения проверенного ответа: Если вы хотите выполнять сервер и клиенты параллельно, вам нужно запустить новый поток для каждого клиента и экземпляра сервера. Вы можете сделать это следующим образом:

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) {...}
}
1 голос
/ 22 сентября 2014

Окно -> Новое окно

Запускать отдельные программы отдельно.

1 голос
/ 03 февраля 2010

Вы можете написать простую стартовую программу, которая запустит все остальные программы в новой JVM. Для вызова новой JVM вы можете использовать методы Runtime.exec ().

Вот как это делается во многих модульных тестах.

Ваша стартовая программа может взять список других программ в качестве аргументов и обработать их каждую в новом процессе Java.

1 голос
/ 03 февраля 2010

Ну, почему бы не написать контрольный пример с использованием JUnit. Я имею в виду,

  • Подготовить 2 файла свойств, один для сервера и другой для клиента
  • Напишите тестовое устройство, которое запускает сервер и несколько клиентов для запуска теста
  • Затем напишите ваши тестовые случаи на основе этого

Я знаю, что мы не должны называть это модульным тестом, так как это будет зависеть от сетевого ввода-вывода. Итак, называйте это так, как считаете нужным. Я предлагаю просто использовать для этого JUnit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...