Java 模拟自动连线通用接口
我试图使用Java 模拟自动连线通用接口,java,spring,junit,mocking,mockito,Java,Spring,Junit,Mocking,Mockito,我试图使用@MockBean模拟自动连线接口itemRepository,但是当测试执行ResourceController.listAll()中的itemRepository.findAll()方法时,在运行测试时,我有一个NullPointerException。在调用resourceController.listAll()之前的中断点测试中,正确创建了我的mockitemRepository,但在listAll()中,没有引用mock 你知道我如何模拟这种自动连接的通用接口吗 测试list
@MockBean
模拟自动连线接口itemRepository
,但是当测试执行ResourceController.listAll()
中的itemRepository.findAll()
方法时,在运行测试时,我有一个NullPointerException
。在调用resourceController.listAll()
之前的中断点测试中,正确创建了我的mockitemRepository
,但在listAll()
中,没有引用mock
你知道我如何模拟这种自动连接的通用接口吗
测试listAll()的方法:
为什么
ResourceController
mockbean?可能是因为它是一个抽象类,但为什么要对抽象类进行单元测试呢?依赖项不会被注入到模拟中。@jny-我需要对这个类进行单元测试,因为有些方法有自己的实现。我希望避免使用子类进行单元测试。ResourceController
是一个抽象类,我不能用@InjectMocks
(需要是一个真实的实例)对其进行注释,以使用@Mock
并最终注入其依赖项。
public abstract class ResourceController<T extends RESTResource<T>> extends MainController {
@Autowired
protected RESTRepository<T> itemRepository;
public Page<T> listAll(T search, Pageable pageable) {
return itemRepository.findAll(search, pageable);
}
}
@NoRepositoryBean
public interface RESTRepository<T> extends PagingAndSortingRepository<T,
String>, JpaSpecificationExecutor<T> {
}
@RunWith(SpringRunner.class)
@ContextConfiguration
public class ResourceControllerTest {
@MockBean(classes = ResourceController.class, answer = CALLS_REAL_METHODS)
private ResourceController ressourceControler;
@MockBean(classes = RESTResource.class)
private RESTResource search;
@MockBean
protected RESTRepository itemRepository;
@MockBean
private Pageable pageable;
@Before
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testListAll() throws Exception {
// Given
Page page = new PageImpl(new ArrayList());
when(itemRepository.findAll(search, pageable)).thenReturn(page);
// When
Object obj = ressourceControler.listAll(search, pageable);
//Then
...
}