首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NoSuchBeanDefinitionException:在已经实现的单元测试类中添加新的依赖项注入后没有类型的合格bean”错误

“NoSuchBeanDefinitionException:在已经实现的单元测试类中添加新的依赖项注入后没有类型的合格bean”错误
EN

Stack Overflow用户
提问于 2022-06-24 17:30:55
回答 1查看 530关注 0票数 0
代码语言:javascript
复制
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.companyname.enterpriseteam.demo.anonymizer.DAnonymizer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

下面是一个模拟但逻辑上准确的代码表示形式

配置包

代码语言:javascript
复制
…
import org.companyname.enterpriseteam.demo.anonymizer.DAnonymizer;
import org.companyname.entuserfilter.externals.adminusersearch.AdminSearchUserRecordsAnonymizer;
…


@Configuration
public class AdminUserSearchAnonymizationConfiguration {
  @Bean
  public AdminSearchUserRecordsAnonymizer
      adminSearchUserRecordsAnonymizer(final DAnonymizer dAnonymizer) {
    return new adminSearchUserRecordsAnonymizerImpl(dAnonymizer);
  }
}

我在不同的包中创建的新接口

代码语言:javascript
复制
…
Some imports
…

public interface AdminSearchUserRecordsAnonymizer {
  List<StoredUserRecord> anonymizeAdminSearchUserRecordsIfNeeded(
      final List<StoredUserRecord> storedUserRecords,
      final String orgId,
      @Nullable final Long requestUserId);
}

接口的实现

代码语言:javascript
复制
…
Some imports
…


public class AdminSearchUserRecordsAnonymizerImpl
    implements AdminSearchUserRecordsAnonymizer {
  private final DAnonymizer dAnonymizer;

  public AdminSearchUserRecordsAnonymizerImpl(final DAnonymizer dAnonymizer) {
    this.dAnonymizer = dAnonymizer;
  }


  @Override
  public List<StoredUserRecord> anonymizeAdminSearchUserRecordsIfNeeded(
      final List<StoredUserRecord> storedUserRecords,
      final String orgId,
      @Nullable final Long requestUserId) {
    if (!DConstants.COMPANY_ORG_ID.equals(orgId) || requestUserId == null) {
      // System.out.println("NO ANONYMIZATION" + storedUserRecords);
      return storedUserRecords;
    }

    // System.out.println("ANONYMIZATION TO BE DONE ON USER RECORDS LIST" + storedUserRecords);
    return storedUserRecords.stream()
        .map(entry -> anonymizeUserRecordIfNeeded(entry, orgId, requestUserId))
        .collect(Collectors.toList());
  }


  private StoredUserRecord anonymizeUserRecordIfNeeded(
      final StoredUserRecord storedUserRecord, final String orgId, final Long requestUserId) {
        final var anonymizedStoredUserRecord =
        dAnonymizer.getAnonymizedUserInfoForOrg(
            orgId, storedUserRecord.userId().get(), requestUserId);

        return anonymizedStoredUserRecord
        .map(
            anon ->
                new StoredUserRecord(
                    storedUserRecord.userId(),
                    anon.email(),
                    storedUserRecord.externalId(),
                    anon.name(),
        .orElse(storedUserRecord);
  }
}

执行依赖项注入的类的构造函数。

代码语言:javascript
复制
…
Some imports
…

public class AdminViewElasticSearchManager implements AdminViewManager {
  private final someObject1;
  private final someObject2;
  private final someObject3;
  private final someObject4;
  private final AdminSearchUserRecordsAnonymizer
        adminSearchUserRecordsAnonymizer;

public AdminViewElasticSearchManager(
    someClass1 someObject1,
    someClass2 someObject2,
    someClass3 someObject3,
    someClass4 someObject4,
    AdminSearchUserRecordsAnonymizer
        adminSearchUserRecordsAnonymizer
    ) {
  this.elasticSearchReader = elasticSearchReader;
  this.someObject1 = someObject1;
  this.someObject2 = someObject2;
  this.someObject3 = someObject3;
  this.someObject4 = someObject4;
  this.adminSearchUserRecordsAnonymizer =
          adminSearchUserRecordsAnonymizer;

}

我在上面这个类中的某个地方使用我的新实现的方法

代码语言:javascript
复制
@Override
public UserRecordsWithPagination searchWithFilterParams(filterParams, pageRequest, requestUser) {
…
Some code
…

storedUserRecords =
this.adminSearchUserRecordsAnonymizer.anonymizeAdminSearchUserRecordsIfNeeded(
           storedUserRecords, filterParams.orgId, requestUser);
…
More code
…

}

由于依赖注入问题,许多测试都失败了,因为它,我无法正确地进行测试。这个特殊的测试也不像它应该的那样断言,这意味着我的新类没有将正确的列表返回给它的调用者。我想知道它是否与依赖关系没有被正确注入?

代码语言:javascript
复制
…
var filterParams =
    FilterParams.newBuilder()
        .setOrganizationId(UserRecordFixtures.MEMBER_USER_RECORD.organizationId())
        .setSearchNameOrEmails(List.of("johndoe"))
        .build();

var pageRequest =
    PageRequest.newBuilder()
        .setStart(Int64Value.of(0))
        .setLimit(Int64Value.of(1))
        .build();

var result = this.manager.queryByFilterParams(filterParams, pageRequest, null);
System.out.println("THIS IS MY RESULT: " + result);
Assertions.assertEquals(1, result.userRecords().size());
…
EN

回答 1

Stack Overflow用户

发布于 2022-06-27 14:56:25

在配置类中定义DAnonymizer bean,如下所示

代码语言:javascript
复制
@Configuration
public class DAnonymizerConfig {
  
  @Bean
  public DAnonymizer dAnonymizer() {
     return new DAnonymizer();//considering DAnonymizer has default constructor
  }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72747557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档