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

在Spring Boot中运行测试在上下文中失败

万修然
2023-03-14
@EntityScan
@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public Module hibernate5Module()
    {
        return new Hibernate5Module();
    }
}
java prettyprint-override">@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@ActiveProfiles(profiles = "test")
@DataJpaTest
public class NetworkServiceTest
{
    @Autowired
    private TestEntityManager manager;
    @Autowired
    private NetworkService service;

    @Test
    public void whenFindByFacilityIdAndSportId_thenReturnNetwork()
    {
        // Given
        Network net = new Network(100, 200);
        manager.persist(net);
        manager.flush();

        // When
        Network found = service.findByFacilityIdAndSportId(net.getFacilityId(), net.getSportId());

        // Then
        assertThat(found.getFacilityId()).isEqualTo(net.getFacilityId());
        assertThat(found.getSportId()).isEqualTo(net.getSportId());
    }
}

所有测试返回“NosuchBeanDefinitionException:没有'com.example.networkService'类型的合格bean可用:预期至少有1个bean符合autowire候选。依赖项注释:{@org.springframework.beans.factory.annotation.autowired(required=true)}”

这是配置文件application-test.yml

spring:
    datasource:
        url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
        username: sa
        password: 
        driver-class-name: org.h2.Driver
    jpa:
        hibernate:
            ddl-auto: create
liquibase:
    enabled: false

共有1个答案

甄伟兆
2023-03-14

根据@Darren-Forsythe的提示解决了

basetest.java

@RunWith(SpringRunner.class)
@ActiveProfiles(profiles = "test")
abstract class BaseTest
{
    @Test
    public void init() {}
}

baseDatabaseTest.java

@DataJpaTest
@ComponentScan(basePackages = { "com.example.services"})
abstract class BaseDatabaseTest extends BaseTest
{
    @Autowired
    protected TestEntityManager m_pManager;

    @Test
    public void initDatabase() {}
}
public class NetworkServiceTest extends BaseDatabaseTest
{
    @Autowired
    private NetworkService service;

    @Test
    public void whenFindByFacilityIdAndSportId_thenReturnNetwork()
    {
        long facilityId = 100;
        long sportId = 200;

        // Given
        Network net = new Network(facilityId, sportId);
        m_pManager.persist(net);
        m_pManager.flush();

        assertThat(net.getFacilityId()).isEqualTo(facilityId);

        // When
        List<Network> nets = service.findAll();
        Network found = service.findByFacilityIdAndSportId(facilityId, sportId);

        // Then
        assertThat(nets.size()).isGreaterThan(0);
        assertThat(found.getFacilityId()).isEqualTo(net.getFacilityId());
        assertThat(found.getSportId()).isEqualTo(net.getSportId());
        assertThat(found.getSportId()).isNotEqualTo(0);
    }
}
 类似资料:
  • 我想不通..出于某种原因,Spring Junit没有将我的bean添加到上下文中。请砰!! 由:org.springframework.beans.factory.nosuchBeanDefinitionException引起:没有类型为“com.api.demo.store.FileStorage”的合格bean可用:需要至少有1个bean作为autowire候选bean。依赖项注释:{@or

  • 所以基本上我试图以以下形式运行一个测试: 运行它时使用: 不幸的是,它失败了,,没有更多的“详细”输出。 我做错了什么? 我确实收到了这些警告: 警告:未知模块:org.openjdk指定到--add-exports 警告:发生了非法的反射访问操作 警告:所有非法访问操作将在以后的版本中被拒绝

  • 我使用Spock框架来运行我的测试。每个测试类上都有Spring的注释。正如我所看到的,每个测试类都需要上下文,在不同的类中运行几十个测试需要很多时间。是否有一种方法可以配置Spock测试类以在公共spring上下文下运行?

  • 我正在开发一个spring启动应用程序并编写一些junit测试。 但我发现,当我运行任何测试时,tomcat也会启动,这使得这些测试非常缓慢,浪费了很多时间。 当我开发一个SpringMvc应用程序时,junit测试可以在不启动tomcat的情况下运行,这节省了很多时间。 所以,我想问它在那里无论如何要运行启动tomcat的springstart测试?

  • 我正在使用SoapUI Pro。SoapUI网站表示,我应该能够在测试执行期间的任何时候设置上下文变量并获取这些值。在帮助中,它说: 常见的使用方案是通过将相应的计数器和集合保存到上下文并使用它们根据需要控制流来循环或跟踪进度。 如果我使用现成的“运行测试用例”测试步骤,我无法让它工作。被调用的测试似乎没有传递上下文信息。 这是一个非常基本的例子。在我最初的测试中,我放了一些Groovy脚本,上面

  • 我试图使用Junit5为特定的服务类创建单元/集成测试,以避免整个项目过载。 测试类: 错误: 2019-04-03 14:56:06.146警告732---[main]O.S.W.C.S.GenericWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependency