gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:48:37 24 4
gpt4 key购买 nike

我们知道 @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);
}
}

现在我正在尝试编写一个测试:

@RunWith(MockitoJUnitRunner.class)
public class BarServiceTest {
@Mock
private GeneralDao<Bar> barDao;

@InjectMocks
private GeneralService<Bar> barService;

@Test
public void get() {
Bar bar = new Bar();
bar.setId(1L);
when(barDao.get(1L)).thenReturn(bar);

Bar actualBar = barService.get(1L);
assertThat(actualBar, equalTo(bar));
}
}

但是这不起作用!为什么我什么时候写:

@InjectMocks private GeneralService<Bar> barService;

显示异常?仍然工作于:

@Mock private GeneralDao<Bar> barDao

我不想这样写:

@InjectMocks private BarService barService;

最佳答案

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

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

关于Spring Boot @Autowired by generic 不适用于 @InjectMocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com