@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = MyTest.ContextConfiguration.class)
public class MyTest{
...
public static class ContextConfiguration {
// beans defined here...
}
}
您已经两次声明@dirtiescontext(classMode=AFTER_EACH_TEST_METHOD)
不起作用;但是,下面的说明表明它按文档的方式工作。
import javax.annotation.PreDestroy;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class MyTest {
@Test
void test1(TestInfo testInfo) {
System.err.println(testInfo.getDisplayName());
}
@Test
void test2(TestInfo testInfo) {
System.err.println(testInfo.getDisplayName());
}
@Configuration
static class Config {
@Bean
MyComponent myComponent() {
return new MyComponent();
}
}
}
class MyComponent {
@PreDestroy
void destroy() {
System.err.println("Destroying " + this);
}
}
执行上面的测试类会产生类似于以下内容的STDERR输出。
test1(TestInfo)
Destroying MyComponent@dc9876b
test2(TestInfo)
Destroying MyComponent@30b6ffe0
因此,@dirtiescontext(classMode=AFTER_EACH_TEST_METHOD)
确实是“在每次测试执行后清除应用程序上下文”的方式。
因此,如果这在测试类中不起作用,那么这将是一个bug,您应该向Spring团队报告。
你有什么例子可以证明这不起作用吗?
仅供参考:使用classmode=before_class
只有在上下文已经在当前执行的测试套件中创建的情况下才有意义。否则,您将指示Spring关闭并从不存在的缓存中删除applicationcontext
。就在Spring真正创造它之前。
问题内容: 我有一个包含2个测试的测试类: 当我单独运行测试时,我不会出错,但是当我同时运行所有测试时,会失败。失败是由于某些测试修改了应用程序上下文导致的: 是否可以单独运行此测试?我只想在启动test1时读取所有必需的东西,然后运行测试,然后关闭所有必需的东西。然后启动test2。 问题答案: 您可以在修改应用程序上下文的测试类上使用@DirtiesContext批注。 Java文档 Spri
问题内容: 我的WEB-INF目录下有一些XML文件: lyricsBaseApp-servlet.xml hibernate.xml dataSource.xml beans.xml servlet xml导入其他xml文件: 我希望我的junit4 类包含整个spring配置。使用默认文件名,我创建了一个文件。最后,我不知道该放在哪里… 我试过了: 要么 和其他一些想法,但都失败了。有人可以指
我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean
问题内容: 我有一堆JUnit测试用例(集成测试),它们在逻辑上分为不同的测试类。 我们能够为每个测试类加载一次Spring应用程序上下文,然后将其重新用于JUnit测试类中的所有测试用例 但是,我们只是想知道是否有一种方法可以对一堆JUnit测试类仅加载一次Spring应用程序上下文。 FWIW,我们使用Spring 3.0.5,JUnit 4.5并使用Maven构建项目。 问题答案: 是的,这
我使用Spock框架和Groovy脚本来测试我的Java应用程序。对于我创建的所有类,我的项目有100%的测试覆盖率。然而,我注意到覆盖范围显示,名为“app”的主类没有得到充分测试。 这是我对App类的一个测试: 如何用Spock框架充分测试Spring Boot应用程序上下文?
在运行每个测试类之前,有什么方法可以将应用程序上下文恢复到它的原始状态吗?我不想让“TrainingSessionServiceTest”类扩展AbstractTransactionalJunit4SpringContextTests。以下是我的应用程序上下文的相关部分: