Spring Boot@Autowired by generic不适用于@InjectMock
我们知道@Autowired的主要优点不是对具体实现进行硬编码。看看我的代码: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
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);