我正在JUnit 4中实现一些测试,我不知道为同一个异常编写多个测试代码。
例如,当期望的输出是一个浮点数我用输入和预期结果初始化数组时,然后我填充结果'数组,最后我使用assertArrayEquals()。它看起来像这样:
@Test
public void testing() throws Exception {
float[] inputs = {10.24f,20.23f};
float[] expectedResults = {10.2f,20.2f};
float[] results = new float[inputs.length];
for (int i=0;i<inputs.length;i++) {
results[i]=methodBeingTested(inputs[i]);
}
assertArrayEquals(expectedResults, results);
}
我想这样做但是例外。 必须有一种比为期望Exception的每个测试用例创建方法更好的方法。 有人可以开导我吗?
答案 0 :(得分:2)
当方法失败时,我会将mathod成功的案例分开。以下示例使用catch-exception,zohhak和assertj
import static com.googlecode.catchexception.CatchException.caughtException;
import static com.googlecode.catchexception.CatchException.verifyException;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.runner.RunWith;
import com.googlecode.zohhak.api.TestWith;
import com.googlecode.zohhak.api.runners.ZohhakRunner;
@RunWith(ZohhakRunner.class)
public class MyTest {
@TestWith({
"10.5",
"-2.8"
})
public void should_throw_exception(float input) {
verifyException(new ObjectUnderTest()).methodBeingTested(input);
assertThat(caughtException())
.isInstanceOf(IllegalArgumentException.class);
}
@TestWith({
"10.24, 10.2",
"20.23, 20.2"
})
public void should_succeed(float input, float expectedOutput) {
assertThat(methodBeingTested(input)).isEqualTo(expectedOutput);
}
}
答案 1 :(得分:0)
使用JUnit4,您可以告诉框架,测试方法需要使用以下语法的异常:
@Test(expected = Exception.class)
public void test() {}
只需将Exception.class
替换为您希望在测试中抛出的异常类型。
在您的测试方法中,您还可以捕获异常并在catch块中添加断言。
int exceptionThrown = inputs.length;
for (int i=0;i<inputs.length;i++) {
try {
// code that should throw an exception
} catch (SomeException e) {
assert.assertTrue(e instanceof SomeException)
exceptionThrown--;
}
}
assert.AssertEquals(exceptionThrown, 0);
但是如果某个数组应该抛出一个异常,我认为更好的方法就是将那些通过w / o异常的方法与那些在单独方法中抛出异常方法的方法分开,以使事情更清晰,更具可读性。