Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 使用JUnit捕获自定义异常_Java_Junit - Fatal编程技术网

Java 使用JUnit捕获自定义异常

Java 使用JUnit捕获自定义异常,java,junit,Java,Junit,我正在为一个方法编写一个JUnit测试用例,在这个方法中,我试图捕获一个异常,但由于某种原因,我的测试没有命中异常。方法很长,但我只需要捕获if块中的异常 试验方法: public void createClient() throws EISClientException { if( client == null ) { ClientConfig c = new ClientConfig(); //Add Glocal JSON/Jackson Prov

我正在为一个方法编写一个
JUnit
测试用例,在这个方法中,我试图捕获一个
异常
,但由于某种原因,我的测试没有命中异常。方法很长,但我只需要捕获
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);
}
看起来,如果客户端未构建,则抛出
异常
,但如果我将
null
作为任何方法中的参数传递,则肯定会得到
NullPointerException

任何帮助都将不胜感激


谢谢

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

实际上,在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();
}

只有抛出异常时,此测试才会成功(我知道这并不能直接回答您的问题)

我知道这一点,并且我尝试过这种方法,但没有成功。您确定创建客户端真的抛出了自定义异常吗?我说,“看起来像”。这意味着不确定只是猜测。但他并没有把被嘲弄的客户放在任何地方?如果我错了,请纠正我。@DJ你是对的。我认为它必须设置一个单例或静态实例。但我不确定