Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟自动连线通用接口_Java_Spring_Junit_Mocking_Mockito - Fatal编程技术网

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()
之前的中断点测试中,正确创建了我的mock
itemRepository
,但在
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
                    ...
        }