Функциональный веб-сервис / тест интеграции с Junit
Вопрос направлен на то, чтобы найти лучшее решение, чем мое.
У меня есть следующие ТРЕБОВАНИЯ для моих интеграционных тестов:
- Каждый интеграционный тест реализован в одном тестовом классе.
- Методы в тестовом классе должны выполняться по порядку.
- Каждый метод является одним из этапов интеграционного / функционального тестирования.
- В случае сбоя тестового метода все остальные тестовые методы в тестовом классе должны быть пропущены, поскольку нет смысла искать последующие ошибки.
МОЕ РЕШЕНИЕ выглядит так:
Я просто наследую каждый тестовый класс от моего абстрактного тестового класса:
package myPackage;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestWatcher;
public abstract class FailFastTest {
private final static List<Class<?>> FAILED_CLASSES = new CopyOnWriteArrayList<Class<?>>() ;
private final Class<? extends FailFastTest> thatClass = this.getClass();
@Rule
public final TestWatcher onFailedRule = new TestWatcher() {
protected void failed(Throwable e, org.junit.runner.Description description) {
FAILED_CLASSES.add(thatClass);
};
};
@Before
public final void beforeMethod() {
final boolean failed = FAILED_CLASSES.contains(thatClass);
if(failed) {
System.out.println(thatClass + " FAILED. Aborting test.");
org.junit.Assume.assumeTrue(!failed);
}
}
}
У кого-нибудь есть идея получше? Моя проблема: я не могу запустить такой тестовый класс несколько раз параллельно, потому что имя класса сигнализирует о пропуске...
НЕТ! Это не дубликат! Я пытаюсь написать функциональные тесты, которые используют различные (веб-сервисы) в определенном порядке. Вопрос "Как проверить сервлет?" совсем другое!
Тем не мение. Я переключился на TestNG. TestNG поддерживает все мои требования и работает как шарм. Мне больше не нужен мой клеевой код!:-)