当前位置: 首页 > 知识库问答 >
问题:

Spring boot:单元测试和配置文件

昌勇锐
2023-03-14

我正在为一个rest控制器进行单元测试,它只是一个更大应用程序的一小部分
我的应用程序无法识别我的测试上下文,我有以下例外:java。lang.IllegalStateException:未能加载ApplicationContext

这是我的测试课:

测试重新控制器

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(locations = "classpath:/META-INF/spring/context-test.xml")
@WebIntegrationTest
public class MyRestControllerTest extends AbstractTransactionnalTest {

  @Autowired
  private IManager manager;

  @Test
  // my unit tests
}

问题是,如果我在下面的应用程序类中使用class=Production.class,而不是地点="classpath:/META-INF/Spring/context-test.xml",它可以正常工作:

@Configuration
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableScheduling
@ImportResource({ "classpath:/META-INF/spring/context-production.xml" })
public class Production {
  // class content
}

我已经阅读了所有有类似问题的帖子,我知道它链接到@配置@EnableAutoConfigance注释,但是当我尝试使用这些注释的自定义配置类并从context.xml导入设置时,它不起作用。
理想情况下,我希望不添加任何配置类,并且只希望在我的test-context.xml中添加bean。
是否可以用我的context.xml中的bean或TestRestController上的注释来解决此问题?

这是我的堆栈跟踪:

java.lang.IllegalStateException: Failed to load ApplicationContext

    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
   ... 26 more
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    ... 35 more
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)
    ... 39 more

下面是我用来在测试环境中模拟管理器的bean。xml:

<bean id="IManager"
        class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.service.impl.Manager"/>

我尝试使用自定义管理器模拟,其中数据库被替换为列表
如果删除注释@WebIntegrationTest,应用程序上下文将正确加载,但我会遇到另一个异常,因为没有@WebIntegrationTest注释,服务器无法启动。

获取网络地址请求时出现I/O错误:连接被拒绝

我在spring 1.3.7上跑步。

共有1个答案

宇文良骏
2023-03-14

@上下文配置

@ContextConfiguration("/test-config.xml") 
public class XmlApplicationContextTests { 
    // class body... 
}

Spring Boot提供了@SpringBootTest

您可以使用

Spring靴的@*测试

搜索算法从包含测试的包开始,直到找到

如果要自定义主配置,可以使用嵌套的@TestConfiguration

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html40.2

 类似资料:
  • 对于php开发者来说,做单元测试并不是很方便,这也是大部分phper不愿意写单元测试的原因。但是单元测试对提高程序的质量来说,有实在是太重要的了。 有关这一点,我也是在学习java,体验过单元测试的魅力之后才切身体会到的。 那么现在我们就以herosphp为栗子,一起来看看php的单元测试环境如何配置。 首先,毫无疑问,php的单元测试肯定是要依赖phpunit这个工具了。那么我们要先 安装php

  • 配置和运行本地单元测试 本地单元测试 本地单元测试用来执行那些对Android没有依赖或Android依赖容易mock的单元测试. 本地单元测试运行在自己电脑上,测试用例在本地虚拟机上编译运行,执行速度快. 本地单元测试写在app\/src\/test\/java目录下. 本地单元测试使用JUnit或TestNG测试框架. 使用的演示代码 这里使用Google官方开源的示例进行演示,地址:http

  • 如果我们需要自定义本地单元测试配置,可以这样做. 操作步骤: 打开Run\/Debug Configurations对话框 —> 点击左上角的+号 —> Android Tests 然后新增一个Android Tests配置窗口: 1.Name: 输入配置名 2.Module:选择需要测试的模块 3.Test: 指定测试范围 4.指定instrumentation runner 5.指定目标设备.

  • 我已经创建了一个应用程序使用Springboot和Hibernate,我想配置它的单元测试。 首先,这是DAO接口。 这是DAO接口的实现 然后我创建了一个测试类,如下所示 我已经将application.properties文件放在test和src目录的资源中。 我尝试运行此单元测试用例,但由于以下错误而失败: 那么我可以知道为DAO层配置单元测试的最佳方法吗?

  • 需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您

  • 我创建了一个包含各种endpoint的Spring Boot应用程序。除了和登录终结点之外,我为其他请求添加了过滤器。所有其他请求应具有: