2015-09-04 5 views
0

Я пишу некоторые тесты JUnit, которые расширяют класс из сторонней библиотеки. Суперкласс расширяет TestCase, поэтому по определению мой подкласс.Можно ли смешивать JUnit 3 и JUnit 4?

В моем подклассе я пишу методы тестирования с префиксом test, и они выполняются.

Однако, по ряду причин, мы хотели бы перейти на JUnit 4 (одна из этих причин является то, что мы не хотим, чтобы иметь префикс методы испытаний с test)

Я пытался просто писать свои новые тесты с аннотацией JUnit 4 @Test, но эти методы не выполняются.
Например:

public abstract class UtilityClassFromThirdPartyLibrary extends TestCase { 

} 

public class MyTestClass extends UtilityClassFromThirdPartyLibrary { 

    public void testThisMethodIsInvokedBecauseItStartsWithTest { 
    } 

    @Test 
    public void thisMethodDoesNotGetInvoked { 
    } 
} 

Не расширение 3-го класса теста партии не вариант. (Для чего это стоит, это весна AbstractXmlFlowExecutionTests, которая, в свою очередь, расширяет другие классы Spring, которые в конечном итоге расширяют TestCase. Методы суперклассов обеспечивают так много настроек и шаблонов, что не расширяет их просто, чтобы использовать JUnit 4 будет контрпродуктивным)

Как уже упоминалось, одна из наших мотивов для использования аннотации JUnit 4 @Test заключается в том, что она позволяет нам лучше называть наши методы. Наше мнение - это слово test является избыточным, так как класс явно является тестовым классом, а метод аннотируется с помощью @Test. И мы пишем наши тесты в стиле BDD, и поэтому наши имена методов тестирования описывают, что должно делать единица измерения - наше соглашение об именах: public void shouldDoSomething()

Кто-нибудь знает, возможно ли его смешивать тестовые классы mix'n'match, которые расширяются JUnit 3's TestCase с методами, использующими JUnit 4's @Test?, И если да, то как?

Благодаря
Натан


Я уже видел пару SO вопросов, которые касаются быть та же проблема, но они связаны с Android или тестовых наборов, так что не совсем такой же, как мой вопрос. EG: испытания типа
Is it possible to mix JUnit3 and JUnit4?
https://stackoverflow.com/questions/32393330/run-junit-3-and-junit-4-tests-in-the-same-class

+0

Как вы будете проводить тесты? Maven? IntelliJ? Затмение? –

+0

Да, должен был упомянуть, тесты выполняются как часть нашей сборки Maven, но также и в IDE разработчика (мы можем выбрать нашу среду IDE, а также использовать IntelliJ и Eclipse) –

+0

вы пытались использовать аннотацию '@ RunWith' с помощью [spring junit runner] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/junit4/SpringJUnit4ClassRunner.html)? –

ответ

5

JUnit4 не должны распространяться junit.framework.TestCase прямо или косвенно. Если вы это делаете, вы часто сталкиваетесь с запутанным поведением (поля, аннотированные @Rule, игнорируются, тестовые сбои, потому что методы базового класса не вызываются JUnit и т. Д.). Тесты могут выполняться как JUnit4-стиль или JUnit3-стиль в зависимости от того, как они выполняются.

Ваши варианты: либо придерживаться JUnit3, либо убеждать сопровождающих вашего базового класса создавать классы, поддерживающие JUnit4 (Rules, Runners и т. Д.).

+0

Спасибо - пока он не дает решения, он отвечает на главный вопрос тем, что нельзя смешивать Junit 3 и 4. Спасибо :) –