Spring Boot@Autowired by generic不适用于@InjectMock

Spring Boot@Autowired by generic不适用于@InjectMock,spring,spring-test,spring-annotations,Spring,Spring Test,Spring Annotations,我们知道@Autowired的主要优点不是对具体实现进行硬编码。看看我的代码: public interface GeneralDao<T> { T get(Long id); } @Component public class BarDao implements GeneralDao<Bar> { @Override public Bar get(Long id) { Bar bar = new Bar(); // hardco

我们知道@Autowired的主要优点不是对具体实现进行硬编码。看看我的代码:

public interface GeneralDao<T> {
    T get(Long id);
}

@Component
public class BarDao implements GeneralDao<Bar> {
    @Override
    public Bar get(Long id) {
        Bar bar = new Bar(); // hardcode
        bar.setId(id);
        return bar;
    }
}

public interface GeneralService<T> {
    T get(Long id);
}

@Service
public class BarService implements GeneralService<Bar> {
    @Autowired
    private GeneralDao<Bar> barDao;

    @Override
    public Bar get(Long id) {
        return barDao.get(id);
    }
}

由于必须测试
BarService
,因此可以通过如下指定实现类来完成

@InjectMocks private GeneralService<Bar> barService = new BarService(barDao);
@InjectMocks private GeneralService barService=新的barService(barDao);

如果我没有弄错的话,您必须注入一个特定的实现。你必须用一个特定的类来测试它,而不是泛型类。@sebadagostino,但我不想写一个特定的实现
@InjectMocks private GeneralService<Bar> barService;
@Mock private GeneralDao<Bar> barDao
@InjectMocks private BarService barService;
@InjectMocks private GeneralService<Bar> barService = new BarService(barDao);