我不熟悉使用JUnit进行测试,我需要提示测试异常。
我有一个简单的方法,如果它获得一个空输入字符串,则抛出异常:
public SumarniVzorec( String sumarniVzorec) throws IOException
{
if (sumarniVzorec == "")
{
IOException emptyString = new IOException("The input string is empty");
throw emptyString;
}
如果参数是空字符串,我想测试实际抛出异常。为此,我使用以下代码:
@Test(expected=IOException.class)
public void testEmptyString()
{
try
{
SumarniVzorec test = new SumarniVzorec( "");
}
catch (IOException e)
{ // Error
e.printStackTrace();
}
结果是抛出异常,但测试失败。 我错过了什么?
谢谢Tomas
答案 0 :(得分:14)
删除try-catch
块。 JUnit将接收异常并适当地处理它(根据您的注释考虑测试成功)。如果你压制异常,就无法知道JUnit是否被抛出。
@Test(expected=IOException.class)
public void testEmptyString() throws IOException {
new SumarniVzorec( "");
}
此外, Dr jerry 正确地指出您无法将字符串与==
运算符进行比较。使用equals
方法(或string.length == 0
)
http://junit.sourceforge.net/doc/cookbook/cookbook.htm(参见“预期的例外”部分)
答案 1 :(得分:1)
也许是sumarniVzorec.equals(“”)而不是sumarniVzorec ==“”
答案 2 :(得分:0)
怎么样:
@Test
public void testEmptyString()
{
try
{
SumarniVzorec test = new SumarniVzorec( "");
org.junit.Assert.fail();
}
catch (IOException e)
{ // Error
e.printStackTrace();
}
答案 3 :(得分:0)
另一种方法是:
public void testEmptyString()
{
try
{
SumarniVzorec test = new SumarniVzorec( "");
assertTrue(false);
}
catch (IOException e)
{
assertTrue(true);
}