0

我正在尝试模拟一个在一个类中有多个选项的通用接口资源。我发现了一些可以通过命名资源的东西,即将变量命名为与资源上的名称参数相同。但是,如果我有两个名称相同(但泛型类型不同)的 @Injectable 字段,我不能对两者都这样做。有没有解决的办法?

@Service("SourceDescriptionService")
public class SourceDescriptionServiceImpl implements CrudService<LnssDescription> {
    @Resource(name = "LnssCrudRepository")
    private LnssCrudRepository<LnssDescription> descriptionRepository;

    @Resource(name = "SourceRepository")
    private SourceRepository sourceRepository;

    @Resource(name = "LnssCruRepository")
    private LnssCruRepository<LnssState> stateRepository;

    @Resource(name = "LnssCruRepository")
    private LnssCruRepository<LnssVariant> variantRepository;

我的测试尝试:

@Tested
private SourceDescriptionServiceImpl sut;

@Injectable
private SourceRepository SourceRepository;

@Injectable
private LnssCrudRepository<LnssDescription> LnssCrudRepository;

@Injectable
private LnssCruRepository<?> LnssCruRepository;

我在 CruRepository 接口上尝试了其他变体,例如参数化 LnssState,然后将 LnssVariant 作为错误或删除返回到错误状态的参数化。

这是错误:

java.lang.IllegalStateException: Missing @Injectable for field "com.ln.sourceset.model.repository.LnssCruRepository<com.ln.sourceset.model.data.LnssState> stateRepository" in SourceDescriptionServiceImpl

任何帮助将不胜感激!谢谢。

4

1 回答 1

0

让您的测试 Injectable 名称与您正在测试的类中的依赖项相同。

您正在测试的类具有以下依赖性

@Inject
@Named("somename")
private SomeClass somename;

Injectable 在你的测试用例测试上面的类需要有下面。

@Injectable
private SomeClass somename;

希望这可以帮助

于 2019-06-11T18:53:11.587 回答