abh*_*eta 14 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");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不@After,@Test并@before同时工作?
vik*_*m k 13
使用@BeforeEach替代@Before和@AfterEach取代@After.
Rom*_*las 11
本AbstractTransactionalDataSourceSpringContextTests类强制使用旧的JUnit 3.x的语法,这意味着任何的JUnit 4注释将不起作用.
runBare()执行方法不是因为@Before注释,而是因为它被命名runBare(),这是由ConditionalTestCaseJUnit TestCase类提供的方法.
所以你有2个解决方案:
AbstractTransactionalDataSourceSpringContextTests,但使用onSetUp和onTearDown方法而不是@Before和@After方法.小智 9
检查您是否正在使用 Junit4,因为从 Junit5 开始,@Before/@After 现在是 @BeforeEach/@AfterEach,类似的 @BeforeClass/@AfterClass 是 @AfterAll/@BeforeAll。
它应该可以工作...但是由于您正在使用 spring 框架并且几年前引入了 JUnit 4,我建议您使用注释而不是继承。
所以,用@RunWith(SpringJUnit4ClassRunner.class). 删除extends AbstractTransactionalDataSourceSpringContextTests。
现在它应该可以工作了。
即使您想扩展 Spring 抽象测试类,至少也要注意其中一些已被弃用。例如AbstractTransactionalDataSourceSpringContextTests,不推荐使用类。
@BeforeAll如果您使用较新的 JUnit Jupiter(Java 8 及以上版本),您将需要替换@Before为@BeforeAll.
此外,您需要使用注释您的测试类@TestInstance(Lifecycle.PER_CLASS)或创建@BeforeAll方法static。这是一个例子:
@TestInstance(Lifecycle.PER_CLASS)
class MyTestClass {
MyHeavyResource sharedResource;
@BeforeAll
void init() {
System.out.println("init");
sharedResource = new MyHeavyResource(1234);
}
@Test
void myTest() {
System.out.println("myTest");
sharedResource.methodUnderTest();
}
}
Run Code Online (Sandbox Code Playgroud)
Lifecycle.PER_CLASSJUnit 5 对此更加严格(要求两者之一)的可能原因static是Lifecycle.PER_CLASS它希望测试作者承认在方法中初始化的任何资源实例@BeforeAll将真正在类中的每个单独的单元测试方法之间共享。这可能会损害它们的隔离性,例如,如果sharedResource上面的示例中的不是无状态/幂等的。
如果sharedResource不能安全地共享(或者如果它是相当轻量级的),则init应该用 来注释该方法@BeforeEach,这将在执行类中的每个单独测试之前创建一个新实例。
JavadocTestInstance解释了 using 如何Lifecycle.PER_CLASS实际强制执行测试类的单个实例;而 JUnit 4 及更早版本的行为相当于Lifecycle.PER_METHOD,它为其中包含的每个方法创建了一个新的测试类实例@Test。这会在某种程度上误导作者,认为@Before每个测试只执行一次。
| 归档时间: |
|
| 查看次数: |
25877 次 |
| 最近记录: |