У нас есть две разные реализации одного и того же интерфейса. Думайте об этом как о справочной и производственной реализации. Две реализации реализуются разными командами, и цель состоит в том, чтобы получить одинаковые результаты от обеих реализаций.
Команда, создающая эталонную реализацию, создала большое количество тестовых случаев на основе Junit (сейчас ~ 700 тестовых случаев), и эти модульные тесты часто запускаются во время разработки. Мы можем запустить один и тот же набор контрольных примеров для реализации производства.
Функциональность производственной реализации проверяется с помощью регрессионного тестирования. Тем не менее, способность запускать модульные тесты с производственной реализацией дает нам быструю обратную связь о том, что что-то серьезно сломалось каждый раз, когда мы получаем новую версию производственного кода.
Но поскольку некоторые функциональные возможности в производственном выпуске отсутствуют или результаты отличаются из-за известных ошибок, не все тесты проходят с этой реализацией. Это затрудняет раннее обнаружение регрессий.
Здесь есть несколько категорий:
(A) контрольных примеров, которые имеют значение только для эталонной реализации и никогда не будут важны для производственной реализации
(B) тестовые случаи, когда при тестировании реализации производства должны быть пропущены только определенные утверждения (т. Е. Дополнительные значения, указанные в ссылочной реализации)
(C) контрольные примеры, о которых известно, что они не работают в производственной реализации, поскольку разработка некоторых функций отстает, но должны быть включены позднее
Пока у нас есть следующие варианты:
Загромождение нашего кода утверждениями if, окружающими утверждения, которые работают только в ссылочной реализации. Это решает (B), но трудно поддерживать.
Использование acceptTrue. Это нормально для (A), но создает ложное впечатление, что все хорошо в (B).
Я бы хотел иметь
Возможность пропустить определенные тесты в зависимости от условий выполнения, например, с acceptTrue, но их следует указывать как пропущенные, а не успешные для (C)
Наличие большего количества состояний результатов, учитывающих, как известно, сработал ли ранее контрольный пример, что дает
- Успех для тестового случая, который, как было известно, работал до
- Исправлено для теста, который, как было известно, не работал до
- Ошибка тестового случая, который, как было известно, не работал до
- регрессия для тестового случая, который, как было известно, работал до
- Пропущенные
Кто-нибудь делал что-то подобное раньше или это вообще возможно с JUnit (и желательно в сочетании с использованием плагина eclipse JUnit)?