首页 > 解决方案 > 单元测试,怎么测试?想要但未在 Mockito.verify 上调用

问题描述

我有带有构造函数和方法的GatewayServer.class :

public class GatewayServer {

    private ResourceConfig resourceConfig = null;

    public GatewayServer(...) {
    
            ...
    
            resourceConfig = new ResourceConfig();

            ...
    }

    public void registerController(Class<?> controller) {
            resourceConfig.register(controller);
    }

我有GatewayServerTest.class我想测试是否register()在 resourceConfig 上调用了方法,但我不知道如何添加模拟new ResourceConfig()

@RunWith(MockitoJUnitRunner.class)
public class GatewayServerTest {
    
    @InjectMocks
    GatewayServer gatewayServer;
    
    @Mock
    ResourceConfig resourceConfig;
    
    @Before
    public void setup() {
        gatewayServer = new GatewayServer(...);
    }
    
    @Test
    public void registerControllerTest() {
        
        gatewayServer.registerController(Endpoint.class);
        
        Mockito.verify(resourceConfig, Mockito.atLeastOnce()).register(Mockito.any());
    }  
}

标签: javajunitmockito

解决方案


使用 Mockito 是不可能的,但您可以使用 PowerMock 来模拟构造函数本身。

另一种解决方案是Resource config不在构造函数中初始化,而是在原地初始化(如果您没有任何后初始化):

private ResourceConfig resourceConfig = new ResourceConfig();

在这种情况下,可以使用 Mockito 进行模拟(就像您在测试课程中所做的那样)。


推荐阅读