我需要测试一个使用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
,这不是我所期待的。有人能告诉我我做错了吗?
答案 0 :(得分:2)
您正在测试错误的东西 - 您希望确保对象的构造失败,而不是在ObjectMapperHolder
失效时失败。
您还可以大大简化测试 - 您可以期望抛出EISClientException
而无需执行任何进一步的验证。
重点是让测试失败,并且所需的工作量最小。 似乎传递null
作为您的配置可能会这样做,所以这是一个例子:
@Test(expected = EISClientException.class)
public void testEISThirdPartyClientConctructor() throws EISClientException {
new EISThirdPartyClient(null, "url");
}
如果这不太适合您的需求,您可能需要查看像Mockito这样的模拟框架,以便在您处于代码的关键部分时提供行为。