首页 > 解决方案 > 无法模拟采用接口的方法

问题描述

我的 Spring Boot 项目中有一项服务,其中我有一个采用接口的方法。

interface IT {}
class AService {
 public String method(IT it) {}
}

我有两个实现该接口的类。

class AIT implements IT {}
class BIT implements IT {}

我根据需要在传递 AIT/BIT 类对象的其他服务中使用此服务方法。

现在,我正在为其他模拟服务的服务编写测试用例

public class OtherServiceTests {

    @MockBean
    private Service service;

  
    @Before
    public void setUp() {
    // none of these mocks working
        Mockito.when(service.method(Mockito.any()))
                .thenReturn("");
    Mockito.when(service.method(Mockito.any(IT.class)))
                .thenReturn("");
    Mockito.when(service.method(Mockito.any(BIT.class)))
                .thenReturn("");
    Mockito.when(service.method(Mockito.any(AIT.class)))
                .thenReturn("");
    // all returing to NullPointerException

    
        otherService = new OtherSerice();
    }

}
 

这些模拟都不适用于这种方法。其他模拟工作正常。它返回 NullPointerException 导致测试失败。

我是使用 mockito 进行测试的新手。如果有人可以指导我解决此问题,那么这对我将非常有帮助。

标签: javaspring-bootunit-testingtestingmockito

解决方案


模拟未初始化,注释@MockBean应替换为@Mock. 尝试像这样更改它:

public class AServiceTest {
    @Mock
    AService service;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
    @Test
    public void myTest(){
        Mockito.when(service.method(Mockito.any())).thenReturn("");
        assertEquals("", service.method(new AIT()));
    }
}

推荐阅读