В настоящее время я повторно использую тесты JUnit 4 из другого проекта для своего кода. Я получаю их непосредственно из репозитория другого проекта как часть моей автоматизированной сборки Ant. Это здорово, так как это гарантирует, что мой код будет соответствовать самой последней версии тестов.
Однако есть подмножество тестов, которые я никогда не ожидаю пройти в своем коде. Но если я начну добавлять аннотации @Ignore к этим тестам, мне придется поддерживать собственную отдельную копию реализации теста, чего я действительно не хочу делать.
Есть ли способ исключить отдельные тесты без изменения источника теста? Вот что я просмотрел до сих пор:
Насколько я вижу, задача Ant JUnit позволяет исключить только целые классы Test, а не отдельные методы тестирования, так что мне это не подходит, мне нужна степень детализации методов.
Я решил собрать TestSuite, который использует отражение для динамического поиска и добавления всех исходных тестов, а затем добавить код для явного удаления тестов, которые я не хочу запускать. Но я отказался от этой идеи, когда заметил, что TestSuite API не предоставляет метод удаления тестов.
Я могу создавать свои собственные тестовые классы, которые расширяют исходные тестовые классы, переопределять определенные тесты, которые я не хочу запускать, и аннотировать их с помощью @Ignore. Затем я запускаю JUnit на своих подклассах. Недостатком здесь является то, что если в исходный проект добавляются новые тестовые классы, я не подберу их автоматически. Мне придется следить за новыми тестовыми классами по мере их добавления в исходный проект. Пока это мой лучший вариант, но он не идеален.
Единственный другой вариант, который я могу придумать, — это все равно запускать плохие тесты и игнорировать сбои. Тем не менее, эти тесты требуют времени для запуска (и проваливаются!), поэтому я бы предпочел не запускать их вообще. Кроме того, я не вижу способа указать задаче Ant игнорировать сбои в определенных методах тестирования (опять же - я вижу, как вы можете сделать это для отдельных тестовых классов, но не для методов).