@After,@之前没有在testcase中工作

时间:2012-05-14 09:26:38

标签: java junit 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不同时工作?

6 个答案:

答案 0 :(得分:10)

AbstractTransactionalDataSourceSpringContextTests类强制使用旧的JUnit 3.x语法,这意味着任何JUnit 4注释都不起作用。

您的方法runBare()的执行不是因为@Before注释,而是因为它被命名为runBare(),这是ConditionalTestCase和JUnit {{3}提供的方法}。class。

所以你有2个解决方案:

  • 使用AlexR答案使用JUnit 4测试和Spring;
  • 保留AbstractTransactionalDataSourceSpringContextTests的继承权,但请使用onSetUponTearDown方法,而不是@Before@After方法。

答案 1 :(得分:6)

使用@BeforeEach代替@Before,并使用@AfterEach代替@After

答案 2 :(得分:3)

它应该工作......但是因为你正在使用spring框架并且多年前推出了JUnit 4,我建议你使用注释而不是继承。

所以,用@RunWith(SpringJUnit4ClassRunner.class)注释你的课程。删除extends AbstractTransactionalDataSourceSpringContextTests

不要忘记制作@Before和@After方法静态

现在它应该工作了。

即使你想扩展Spring抽象测试类,至少要注意其中一些被弃用。例如,不推荐使用类AbstractTransactionalDataSourceSpringContextTests

答案 3 :(得分:3)

检查您使用的是Junit4,因为从Junit5开始,@ Before / @ After现在是@ ​​BeforeEach / @ AfterEach,而类似的@ BeforeClass / @ AfterClass是@ AfterAll / @ BeforeAll。

答案 4 :(得分:1)

如果您在 IDE 中使用自动导入,请确保从 @Test 包中导入 @Beforeorg.junit

答案 5 :(得分:0)

在我的情况下,我遇到了一个问题,解决方案是更改java访问修饰符,这是私有的。

之前(无效) @测试 void validate()引发异常{}

(工作后) @测试 公共无效validate()引发异常{}