Возможно ли для теста e JUnit определить, работает ли он в Eclipse (а не в ant) - PullRequest
7 голосов
/ 07 декабря 2010

У меня есть тест, который сравнивает большой блок ожидаемого XML с фактическим полученным XML.Если XML значительно отличается, фактический XML записывается на диск для анализа, и тест не пройден.

Я бы предпочел использовать assertEquals, чтобы легче сравнивать XML в Eclipse, но это может привести к очень большим журналам JUnit и CruiseControl.Поведение JUnit в зависимости от того, выполняется ли оно через Eclipse или Ant.

Ответы [ 5 ]

9 голосов
/ 07 декабря 2010

Вот 2 решения.

Использовать системные свойства

boolean isEclipse() {
    return System.getProperty("java.class.path").contains("eclipse");
}

Использовать трассировку стека

boolean isEclipse() {
    Throwable t = new Throwable();
    StackTraceElement[] trace = t.getStackTrace();
    return trace[trace.length - 1].getClassName().startsWith("org.eclipse");
}
2 голосов
/ 28 июня 2016

Может быть, подход "java.class.path" может быть слабым, если вы включите в путь какой-нибудь jar-файл затмения.

Альтернативным подходом может быть проверка "sun.java.command" вместо:

На моей машинеopenjdk-8):

sun.java.command    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner ...

Возможный тест:

boolean isEclipse() {
    return System.getProperty("sun.java.command")
      .startsWith("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner");
}
2 голосов
/ 07 декабря 2010

Да - вы можете проверить, установлены ли определенные свойства osgi (например, System.getProperty("osgi.instance.area")). Они будут пустыми, если junit запущен через ant за пределами затмения.

0 голосов
/ 13 декабря 2013

С Java 1.6+, похоже, что результат System.console() делает разницу между запуском для Eclipse или из терминала:

boolean isRealTerminal()
{
    // Java 1.6+
    return System.console() != null;
}
0 голосов
/ 07 декабря 2010

Обычно системные свойства различны в разных средах. Попробуйте найти системное свойство, которое устанавливается только eclipse или ant.

Кстати: вывод в eclipse такой же, просто консоль для eclipse отображает вывод в более читаемой форме.

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

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