@After,@before не работает в testcase

я начал тестирование и теперь я хочу использовать @After, @Before и @Test но мое приложение работает только в @Before метод и дает выход на консоли

до

однако, если я удалить @After и @Before он запускает @Test. Мой код здесь:

public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{

    @Before
    public void runBare(){
        System.out.println("before");
    }

    @Test
    public void testingMethod(){
        System.out.println("testing");
    }

    @After
    public void setDirty(){
        System.out.println("after");
    }
}

почему @After, @Test и @before работая одновременно?

3 ответов


на AbstractTransactionalDataSourceSpringContextTests класс заставляет использовать старый JUnit 3.X синтаксис, что означает, что любая из аннотаций JUnit 4 не будет работать.

метод runBare() выполнена не из-за @Before аннотация, но потому что она называется runBare(), который является методом, предоставленной ConditionalTestCase и JUnit TestCase класса.

поэтому у вас есть 2 решения:

  • используйте ответ AlexR для использования тестов JUnit 4 и Spring;
  • Keep ваше наследство AbstractTransactionalDataSourceSpringContextTests, а onSetUp и onTearDown методы вместо @Before и @After методы.

это должно сработать... Но поскольку вы работаете с spring framework, а JUnit 4 был представлен несколько лет назад, я предлагаю вам использовать аннотации вместо наследования.

Итак, аннотируйте класс с @RunWith(SpringJUnit4ClassRunner.class). Удалить extends AbstractTransactionalDataSourceSpringContextTests.

не забудьте сделать @Before и @After методы статический

Теперь он должен работать.

даже если вы хотите продлить весенние абстрактные тестовые классы, по крайней мере, обратите внимание, что некоторые среди них есть осужденные. Например, класс AbstractTransactionalDataSourceSpringContextTests устарела.


использовать @BeforeEach вместо @Before и @AfterEach вместо @After.