使用JUnit测试构造函数

时间:2015-12-08 18:34:38

标签: java junit

我需要测试一个使用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,这不是我所期待的。有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

您正在测试错误的东西 - 您希望确保对象的构造失败,而不是在ObjectMapperHolder失效时失败。

您还可以大大简化测试 - 您可以期望抛出EISClientException而无需执行任何进一步的验证

重点是让测试失败,并且所需的工作量最小。 似乎传递null作为您的配置可能会这样做,所以这是一个例子:

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

如果这不太适合您的需求,您可能需要查看像Mockito这样的模拟框架,以便在您处于代码的关键部分时提供行为。