首页 文章

使用JUnit捕获自定义异常[重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在为一个方法编写一个 JUnit 测试用例,我试图捕获 exception 但由于某种原因我的测试没有达到异常 . 方法很长但我只需要捕获 if 块中的异常 .

测试方法:

public void createClient() throws EISClientException {
    if( client == null ) {
        ClientConfig c = new ClientConfig();

        //Add Glocal JSON/Jackson Provider
        c.register( JacksonFeature.class );

        if ( isDisableSslValidation() ) {  
            try {
                client = ClientBuilder.newBuilder().sslContext( SslUtil.createGullibleSslContext() )
                            .hostnameVerifier( SslUtil.gullibleVerifier ).withConfig( c ).build();
            } catch( Exception e ) {
                throw new EISClientException( e );
            }
        } else {
            client = ClientBuilder.newBuilder().withConfig( c ).build();
        }

        //Add Client Properties
        if( clientProperties.size() > 0 ) {
            for( String key : clientProperties.keySet() ) {
                client.property( key, clientProperties.get( key ) );
            }
        }

        //Add Client Filters
        if( clientFilters != null && clientFilters.size() > 0 ) {
            for( IClientFilter cf : clientFilters ) {
                client.register( cf.getFilter() );
            }
        }

    }
}

JUnit测试:

@Test
public void testCreateClientException() throws Exception {
    ClientConfiguration clientConfiguration = new ClientConfiguration();
    Client client = mock(Client.class);

    boolean caughtException = false;
    try {
        clientConfiguration.setDisableSslValidation(true);
        client = ClientBuilder.newBuilder().build();
        clientConfiguration.createClient();

    } catch (EISClientException ex) {
        caughtException = true;
    }
    assertTrue(caughtException);
}

看起来如果客户端没有构建然后抛出 exception 但是如果我在任何方法中传递 null 作为参数肯定会得到 NullPointerException .

任何帮助,将不胜感激 .

谢谢

2 回答

  • 0

    您在执行测试之前正在设置模拟客户端 . 在您正在测试的方法中,它启动 if (client == null) 我认为这是评估为false并且在方法中没有处理任何内容

  • 0

    实际上,在JUnit中有一种更简洁的方法来验证抛出的异常:

    @Test(expected=EISClientException.class)
    public void testCreateClientException() throws Exception {
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        Client client = mock(Client.class);
        clientConfiguration.setDisableSslValidation(true);
        client = ClientBuilder.newBuilder().build();
        clientConfiguration.createClient();
    }
    

    如果抛出异常,这个测试只会成功(我知道这不会直接回答你的问题)

相关问题