我有以下代码
ChatClientThread
我想编写一个JUnit来测试我的代码是否会捕获IOException。
PS:NetModelStreamingException是扩展RuntimeException的自定义Exception类。
答案 0 :(得分:1)
使用JUnit4 +的方法可以测试异常处理是否符合预期(请注意,如果未引发异常,则需要使测试失败)。
@Test
public void testWriteToOutputStreamExceptionHandling() {
//Dummy object for testing
OutputStream exceptionThrowingOutputStream = new OutputStream() {
public void write(byte[] b) throws IOException {
throw new IOException(); //always throw exception
}
public void write(int b) {} //need to overwrite abstract method
};
try {
YourClass.writeToOutputStream(new byte[0], exceptionThrowingOutputStream);
fail("NetModelStreamingException expected");
}
catch (NetModelStreamingException e) {
//ok
}
}
如果在其他测试方法中也需要该伪对象,则应在测试用例中声明一个成员变量,并以setUp
注释的@Before
方法对其进行初始化。另外,您可以通过在try-catch
批注中声明来隐藏@Test
块。
这样,代码将如下所示:
private OutputStream exceptionThrowingOutputStream;
@Before
public void setUp() throws Exception {
exceptionThrowingOutputStream = new OutputStream() {
@Override
public void write(byte[] b) throws IOException {
throw new IOException();
}
@Override
public void write(int b) {}
};
}
@Test(expected = NetModelStreamingException.class)
public void testWriteToOutputStreamExceptionHandling() throws NetModelStreamingException {
YourClass.writeToOutputStream(new byte[0], exceptionThrowingOutputStream);
}