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

将@SpringBootTest添加到测试类挂起单元测试中

柳弘方
2023-03-14

我想测试我的Spring应用程序。当我将@SpringBootTest添加到我的测试类中时,即使我等待了一个多小时,测试也会挂起并且不会开始!删除SpringBootTest注释会导致初始化@Value字段失败,并且我无法测试任何组件类。我的配置类代码:

@ConditionalOnProperty(value = "app.scheduling.enable", havingValue = "true", matchIfMissing = true)
@Configuration
@EnableScheduling
public class Configurer {    
private static ApplicationContext context = new AnnotationConfigApplicationContext("ir.isc.nps.ach.pasha");
    public static ApplicationContext getContext() {
        return context;
    }
}

我的测试类:

@SpringBootTest
@ContextConfiguration(classes = Configurer.class)
@TestPropertySource("classpath:application.properties")
public class ConfigurerTest {
    @Test
    void getContext() {
        assertNotNull(Configurer.getContext());
    }
}

运行测试类时的堆栈跟踪:

12:15:41.488 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@1a18644 testClass = PashaApplicationTests, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@5acf93bb testClass = PashaApplicationTests, locations = '{}', classes = '{class ir.isc.nps.ach.pasha.Configurer}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{classpath:application.properties}', propertySourceProperties = '{jobs.enable.scheduler=true, cron.expression=* * * ? * *, app.scheduling.enable=true, thread.poolCount=32, inputFile.dir=/TestResources, acceptedFolder.dir=\accepted, errorFolder.dir=\error, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@7e0b85f9, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@6a28ffa4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@72f926e6, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@7714e963], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null].
12:15:41.567 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, jobs.enable.scheduler=true, cron.expression=* * * ? * *, app.scheduling.enable=true, thread.poolCount=32, inputFile.dir=/TestResources, acceptedFolder.dir=\accepted, errorFolder.dir=\error, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=-1}
2020-03-16 12:15:41 INFO  i.i.n.a.Tests - Starting Tests on  with PID (started by  in )
2020-03-16 12:15:41 INFO  i.i.n.a.Tests - No active profile set, falling back to default profiles: default
2020-03-16 12:15:43 INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-03-16 12:15:43 INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 94ms. Found 6 JPA repository interfaces.

当我运行该测试时,该测试处于挂起状态:

共有1个答案

萧元徽
2023-03-14

@springboottest无法加载属性server.port

发现是否使用${server.port},替换为特定端口

 类似资料:
  • 对Kotlin来说有点新,并测试它...我试图使用suspend方法测试dao对象包装器,该方法对SQL返回对象使用awaitFirst()。然而,当我为它编写单元测试时,它只是停留在一个循环中。我认为这是由于awaitFirst()不在相同的测试范围内 这是否意味着withContext将利用一个新线程,并在其他地方重用旧线程?这并没有真正优化任何东西,因为我仍然会有一个线程被阻塞,而不管产生一

  • 单元测试是一种用于测试应用程序中每个函数的软件开发方法。如果你对此概念不熟悉,或许需要google一下相关概念。 CodeIgniter的单元测试类非常简单,由一个评估函数和两个结果函数组成。它没打算成为一个十全的测试集,只提供一个简单的能够评测你的代码是否可以产生正确的数据类型及结果的解决方案。 初始化单元类 和大多数其它的类一样,在CodeIgniter中,单元测试类一样要在控制器中用函数$t

  • 单元测试是一种为你的应用程序中的每个函数编写测试的软件开发方法。如果你还不熟悉这个概念, 你应该先去 Google 一下。 CodeIgniter 的单元测试类非常简单,由一个测试方法和两个显示结果的方法组成。 它没打算成为一个完整的测试套件,只是提供一个简单的机制来测试你的代码是否 生成了正确的数据类型和结果。 使用单元测试类库 初始化类 运行测试 生成报告 严格模式 启用/禁用单元测试 单元测

  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT