我有一些单元测试,它运行代码调用测试服务器,以确保请求格式正确(即我们得到有效数据作为响应)。但是,这意味着如果此测试服务器关闭,则单元测试以及构建可能会被阻止。这不符合良好的单元测试实践,但作为一个思想实验,假设我不允许删除这些测试或更改它们,以便它们实际上不会呼叫服务器。我想更改它们,以便它们在服务器关闭时仍然通过(即尝试连接ConnectException中的结果),但如果发生任何其他异常则失败。使测试更加困难,测试中的代码不会直接抛出ConnecException,而是抛出包含它的包装器异常。所以最初,这意味着每个测试都会看起来像这样:
@Test
public void testNumberOne() {
// body of test...
}
对此:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
}
有什么方法可以避免将try / catch粘贴到每个单元测试中吗?
我知道我至少可以重构一些,ala:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
handleException(e);
}
}
private void handleException(ThirdPartyWrapperException e)
throws ThirdPartyWrapperException {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
但我还能做些什么吗?
答案 0 :(得分:2)
我会在开头添加一行来确定所需资源是否可用
@Test
public void testNumberOne() {
if (!requiredServerAvailable()) return;