Java 用JUnit测试构造函数

Java 用JUnit测试构造函数,java,junit,Java,Junit,我需要测试一个使用JUnit抛出异常的构造函数 以下是建造师: public EISThirdPartyClient(ClientConfiguration _config, String _serviceURL) throws EISClientException { super(_config, _serviceURL); try { ObjectMapperHolder.initialize(_config); } catch (E

我需要测试一个使用JUnit抛出异常的构造函数

以下是建造师:

public EISThirdPartyClient(ClientConfiguration _config, String _serviceURL)
        throws EISClientException {
    super(_config, _serviceURL);

    try {
        ObjectMapperHolder.initialize(_config);
    } catch (Exception e) {
        throw new EISClientException(e);
    }

}
以下是测试用例:

@Test
public void testEISThirdPartyClientConctructor() throws EISClientException {

    @SuppressWarnings("unused")
    EISThirdPartyClient client = new EISThirdPartyClient(new ClientConfiguration(), "url");

    boolean caughtException = false;
    try {
        ObjectMapperHolder.initialize(null);
    } catch (Exception ex) {
        if (ex instanceof EISClientException) {
            caughtException = true;
            assertTrue(ex.getCause() instanceof EISClientException);
        } else {
            ex.printStackTrace();
            fail("Uncaught exception");
        }
    }
    assertTrue(caughtException);
}

我得到了
java.lang.AssertionError
,这不是我所期望的。有人能告诉我我做错了什么吗?

你在测试错误的东西-你想确保对象的构造失败,而不是当
ObjectMapperHolder退出时它退出

您还可以极大地简化测试-您可以期望抛出
EISClientException
,而无需对异常进行任何进一步的验证

主要的一点是让测试以最少的工作量失败。似乎按照您的配置传递
null
,下面是一个示例:

@Test(expected = EISClientException.class)
public void testEISThirdPartyClientConctructor() throws EISClientException {
     new EISThirdPartyClient(null, "url");
}

如果这不太适合您的需要,您可能需要研究一个类似Mockito的模拟框架,以便在代码的关键部分提供行为。

太好了。它通过了。非常感谢:)