当前位置: 首页 > 面试题库 >

每次测试后重新加载Spring应用程序上下文

鲁华茂
2023-03-14
问题内容

我有一个包含2个测试的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContextTest.xml" })
@Transactional
@TransactionConfiguration(defaultRollback = true)

public class MyITest extends implements BeanFactoryAware {

    private BeanFactory beanFactory;

    @Test
    public void test1() throws Exception {}

    @Test
    public void test2() throws Exception {}        
}

当我单独运行测试时,我不会出错,但是当我同时运行所有测试时,会失败。失败是由于某些测试修改了应用程序上下文导致的:

  b = beanFactory.getBean("logDataSource", BasicDataSource.class);
  b.set ...

是否可以单独运行此测试?我只想在启动test1时读取所有必需的东西,然后运行测试,然后关闭所有必需的东西。然后启动test2。


问题答案:

您可以在修改应用程序上下文的测试类上使用@DirtiesContext批注。

Java文档

Spring文档

默认情况下,这将在整个测试类运行之后将应用程序上下文标记为脏。如果要在使用单个测试方法后将上下文标记为脏,则可以对测试方法进行注释,也可以在类级别的注释中将classMode属性设置为AFTER_EACH_TEST_METHOD。

@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)


 类似资料:
  • 问题内容: 我需要在测试类的单个方法中更改applicationContext中活动的Spring概要文件,并且由于我使用的是ProfileResolver,因此在刷新竞赛之前,我需要运行一行代码。我尝试了以下方法: 但是我得到: DirtiesContext对我不起作用,因为它是在类/方法执行之后而不是之前运行的,并且无论如何我都需要在运行刷新/重新加载之前执行一行代码。 有什么建议?我试图查看

  • 我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean

  • 以下是我问题的相关档案。 日志文件摘录,包括应用程序的启动: 每次调用servlet时出现的日志文件摘录: ---根据@Boris的信息,我稍微修改了一下servlet。我的上下文已经加载,我只需要访问它:

  • 我有一个相当简单的设置。一个包含3个模块的maven项目:core/webapp/model。我正在使用Spring boot来升级我的应用程序。在webapp中,我有一个简单的类WebappConfig如下: 当我部署abcd.war时,applicationcontext加载了两次,并导致以下错误stracktrace: 不存在我前面提到的web.xml。 一些有趣的事情,我不知道为什么: n

  • 我在Spring Framework上运行了几个集成测试,它们扩展了名为BaseitCase的基类。 ,如下所示: 问题是其中一个测试有几个声明:@mockbean,在执行这个测试的那一刻,Spring会重新创建上下文,随后的测试有时会使用错误的bean(来自为使用@mockbean的测试创建的上下文)。我通过检查bean有不同的hashcode就知道了这一点。 当我使用@EventListene