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

测试时自动连接@Service时出现UnsatisfiedDependencyException

田化
2023-03-14
package it.euphoria.data.service;

import it.euphoria.data.entity.Customer;
import it.euphoria.data.entity.Seller;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import javax.validation.constraints.NotNull;
import java.util.Set;

public interface CustomerRepository extends JpaRepository<Customer, Long> {

    @Query("SELECT cust FROM Customer cust WHERE cust.seller = :seller")
    Set<Customer> getBySeller(@NotNull @Param("seller") Seller seller);

}
package it.euphoria.data.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CustomerService {

    private CustomerRepository customerRepository;

    @Autowired
    public CustomerService(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    public CustomerRepository getCustomerRepository() {
        return customerRepository;
    }


}

如果在测试时自动连接CustomerRepository它工作得很好,但如果自动连接CustomerService则会得到UnsatisfiedDependencyException

这是customerrepository的工作测试:

package it.euphoria.data.service;

import it.euphoria.data.entity.Customer;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@DataJpaTest
public class CustomerRepositoryTest {
    @Autowired
    CustomerRepository customerRepository;        

    @Test
    public void getBySeller() {
        //test things...
    }
}

这是一个与customerservice仅有的区别:

package it.euphoria.data.service;

import it.euphoria.data.entity.Customer;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@DataJpaTest
public class CustomerRepositoryTest {
    @Autowired
    CustomerService customerService; //<-- The error is here    

    @Test
    public void getBySeller() {
        //test things...
    }
}

org.springframework.beans.factory.unsatisfieddependencyException:创建名为“it.euphoria.data.service.CustomerRepositoryTest”的bean时出错:通过字段“Customer Service”表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.noSuchBeanDefinitionException:没有“it.euphoria.data.service.CustomerService”类型的合格bean可用:应至少有一个合格的自动候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

我找到了这个问题和答案,但它没有解决问题。你能帮我理解一下我在这里做错了什么吗?

共有1个答案

诸葛绍元
2023-03-14

@datajpatest加载与数据库、读取存储库和更低级别的东西(数据源、事务管理器等)相关的bean。

这些测试用于检查SQL查询和驻留在DAO中的任何代码的正确性。

它在任何情况下都不加载整个应用程序,而只加载其中的某个部分。

 类似资料:
  • 我正在尝试运行以下Sqoop命令: 然而,我得到了这个错误: 17/02/04 00:04:53 警告安全。用户组信息: 特权行动例外作为:avinash (身份验证:简单) 原因:java.io.文件不发现异常: 文件不存在: hdfs://localhost:9000/home/avinash/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/slf4j-api-

  • 我在Angular 12中运行ng测试时遇到以下问题: NullInjectorError:R3Injector错误(DynamicTestModule)[BaseURL- 错误:未定义应为true。位于UserContext。(http://localhost:9876/karma_webpack/webpack:/src/app/menu/menu.component.spec.ts:46:2

  • 原因:组件组织。neo4j。内核impl。交易XaDataSourceManager@2a792260'已成功初始化,但无法启动。请参阅随附的原因例外。 CausedBy:组件org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource@23d7c3d2已成功初始化,但无法启动。请参阅附件中的原因异常。 原因:没有架构索引提供程序组织。neo4j。内核应

  • 我还有一个其他相同的eclipse(相同的版本等等...它来自同一个.zip存档),在这里我可以为另一个项目运行相同类型的测试。我已经检查了配置,我没有发现任何差异。因此,我目前无法理解是什么导致了这个问题。 非常感谢你能帮我解决这个问题,

  • root@kudo2:~#sudo systemctl重启apache2 Jobs forapache2.service失败,因为控制进程退出时带有错误代码。有关详细信息,请参阅"systemctl statusapache2.service"和"Journal alctl-xe"。 root@kudo2:~#系统控制状态apache2。服务● apache2。服务——Apache HTTP服务器

  • 问题内容: 我需要使用“ ”类从Java应用程序启动derby服务器。 当我尝试启动服务器时,它将引发异常。 码: 错误: 有人可以告诉我此错误的原因吗? 问题答案: 您的类路径上可能有两次Derby类。在另一个jar归档文件中查找Derby类,并且仅使用它们一次。