在Junit 5测试中注入Spring数据存储库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Junit 5测试中注入Spring数据存储库相关的知识,希望对你有一定的参考价值。

我试图在Junit 5测试中注入一个spring数据存储库,但我得到了

No qualifying bean of type 'com.xxx.core.security.datastore.AccountsRepository' available: expected at least 1 bean which qualifies as autowire candidate

这是测试

package com.xxx.core.security.datastore;

import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig
class AccountsRepositoryTest {


    @Autowired
    AccountsRepository accountsRepository;

    @BeforeEach
    void setUp() {
        Assumptions.assumeTrue(true); // how to get spring profile ! 
    }

    @Test
    public void name() {

    }
}

这是我的回购

package com.xxx.core.security.datastore;

import com.checkit.core.security.datastore.model.Account;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface AccountsRepository extends CrudRepository<Account,Long> {
    Account findByName(String name);
}

当我运行应用程序弹簧似乎连接一切

答案

我通过在注释和测试属性源中包含一个配置类来解决这个问题,因为我记得这不是必需的,因为测试配置是默认的。

@SpringJUnitConfig(CoreApplication.class)
@TestPropertySource("/application.properties")
class AccountsRepositoryTest {


    @Autowired
    AccountsRepository accountsRepository;

    @BeforeEach
    void setUp() {
        Assumptions.assumeTrue(true); // how to get spring profile ! 
    }

    @Test
    public void name() {
    }
}

以上是关于在Junit 5测试中注入Spring数据存储库的主要内容,如果未能解决你的问题,请参考以下文章

JUnit 5:将 spring 组件注入 Extension (BeforeAllCallback / AfterAllCallback)

Spring Boot 中的 Junit 测试不注入服务

Spring JPA Repository findAll 在 JUnit 测试中不返回任何数据

Junit问题01 利用 @Autowired 注入失效问题

在 Spring Boot 应用程序的 JUnit 测试中,自动装配的 JPA 存储库没有合格的 bean

为啥我不能将此 Spring Boot 服务类注入 JUnit 测试类?预计至少有 1 个 bean 有资格作为 autowire 候选者