Java 使用JUnit测试异常。即使捕获到异常,测试也会失败

Java 使用JUnit测试异常。即使捕获到异常,测试也会失败,java,unit-testing,exception-handling,junit,Java,Unit Testing,Exception Handling,Junit,我是JUnit测试新手,我需要一个关于测试异常的提示 我有一个简单的方法,如果它得到一个空的输入字符串,就会抛出一个异常: public SumarniVzorec( String sumarniVzorec) throws IOException { if (sumarniVzorec == "") { IOException emptyString = new IOException("The input string is e

我是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();
        }
结果是抛出异常,但测试失败。 我错过了什么


谢谢你,托马斯

删除
尝试捕获
块。JUnit将接收异常并适当地处理它(根据您的注释,认为测试成功)。如果您禁止异常,就无法知道JUnit是否抛出了异常

@Test(expected=IOException.class)
public void testEmptyString() throws IOException {
    new SumarniVzorec( "");
}
而且,jerry博士正确地指出,不能将字符串与
=
运算符进行比较。使用
equals
方法(或
string.length==0

(参见“预期例外”部分)

可能是sumarniVzorec.equals(“”)而不是sumarniVzorec==“”

如何:

@Test
public void testEmptyString()
{
    try
    {
        SumarniVzorec test = new SumarniVzorec( "");
        org.junit.Assert.fail();
    }
    catch (IOException e)
    {   // Error
        e.printStackTrace();
    }

另一种方法是:

public void testEmptyString()
{
    try
    {
        SumarniVzorec test = new SumarniVzorec( "");
        assertTrue(false);

    }
    catch (IOException e)
    {
       assertTrue(true);
    }

谢谢,但我已经尝试过了,它给出了一个错误:未处理的异常类型IOError您仍然需要将该方法声明为
抛出IOException
@Tomas您从哪里获得IOError?你能用stacktrace发布整个错误消息吗?@developmentAlinsity谢谢,我的错。但是它不会编译,所以它不能真正解决IOError。谢谢,我修复了它,但是它没有解决上面提到的问题。