我已开始测试,现在我想使用@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
不同时工作?
答案 0 :(得分:10)
AbstractTransactionalDataSourceSpringContextTests
类强制使用旧的JUnit 3.x语法,这意味着任何JUnit 4注释都不起作用。
您的方法runBare()
的执行不是因为@Before
注释,而是因为它被命名为runBare()
,这是ConditionalTestCase
和JUnit {{3}提供的方法}。class。
所以你有2个解决方案:
AbstractTransactionalDataSourceSpringContextTests
的继承权,但请使用onSetUp
和onTearDown
方法,而不是@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
包中导入 @Before
和 org.junit
。
答案 5 :(得分:0)
在我的情况下,我遇到了一个问题,解决方案是更改java访问修饰符,这是私有的。
之前(无效) @测试 void validate()引发异常{}
(工作后) @测试 公共无效validate()引发异常{}