Добавление кода, который подтверждает, что я нахожусь в Eclipse?
Как упоминалось в разных местах, maven (версия 3.0.1) не поддерживает CLASSPATH вне проекта. Таким образом, когда jUnitTest хочет запустить внешнее приложение (например, OpenOffice т.е.), происходит сбой при запуске команды '$> mvn test'. В eclipse я могу вручную добавить CLASSPATH в 'run configuration', и тогда он будет работать нормально.
Мой вопрос: могу ли я добавить код в свой исходный код jUnitTest, который подтверждает, что я нахожусь в Eclipse? Поскольку это будет просто пропустить тесты в командной строке. Пока другие тесты все еще продолжаются в командной строке.
3 ответа
Напишите класс, который проверяет, загружен ли класс, который вы хотите использовать (должен быть отдельным классом из-за того, как работают загрузчики классов. Это будет что-то вроде
public class OODetector {
public static boolean isOOOnClassPath() {
try {
OODetector.class.getClassLoader().loadClass("org.... class name here ...");
return true;
} catch (Throwable t) {
return false;
}
}
}
Теперь в начале любого теста, который требует класс на пути к классам, просто поместите Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));
и ваш тест будет пропущен в таких случаях, например
public class OOTests {
@Test
public void smokes() throws Exception {
Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));
// rest of test
}
}
или еще лучше, поместите его в @BeforeClass, например
public class OOTests {
@BeforeClass
public static void smokes() throws Exception {
Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));
}
// tests
}
Это пропустит все тесты в классе, если OO не находится на пути к классам, не повлияет на число неудачных попыток, но сохранит действительный общий счетчик тестов, и когда вы выясните правильный способ получить зависимости времени выполнения для вашего теста, запущенного Maven classpath тогда тесты волшебным образом начнут выполняться
Вы можете использовать профили Maven, чтобы активировать различные свойства, запускать различные команды, вносить изменения в ваш путь к классам по мере необходимости или даже отфильтровывать некоторые тесты. Например, вы можете создать определенный профиль, используемый только в Eclipse.
Просто добавьте флаг времени выполнения или VM, который вы можете проверить на его значение внутри кода.