JMockit多个通用接口可注入导致缺少可注入字段

时间:2016-10-21 04:56:19

标签: spring generics mocking jmockit injectable

我正在尝试模拟一个类中有多个选项的通用接口资源。我找到了一些传递命名资源的东西,即将变量命名为与Resource上的name参数相同。但是,如果我有两个具有相同名称(但不同的泛型类型)的@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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

在您的类中的测试用例测试中,可插入对象必须在下面。

@Injectable
private SomeClass somename;

希望这会有所帮助