尝试/捕获一个void类型

时间:2014-11-10 11:36:26

标签: java junit try-catch void

我是编程新手并且有一个noob问题。我正试图像这样进行测试......

@Test
public void rememberTest()
throws DuplicateException{

    try{
        personA.remember(sighting4);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        assertEquals(personA.remember(sighting3), "The list already contains this sighting");
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}

第一次尝试/捕获编译但第二次没有编译。它告诉我这里不允许“'无效'类型。 “为什么我不能使用void?如果我不能使用void类型,那么我将如何构建我的测试以便抛出异常?

一些背景信息:rememberTest是对一个将项添加到ArrayList的remember方法的测试。

在Class Person中的remember方法如下:

public void remember(final Sighting s)
throws DuplicateException
{
    if(lifeList.contains(s)) {
        throw new DuplicateException("The list already contains this sighting");
    }
    lifeList.remember(s); 
}

如果您需要更多信息,请提出要求,我会根据需要发布。

3 个答案:

答案 0 :(得分:1)

由于您的方法已确保不会添加重复值,因此我建议您从代码中删除assertEquals

@Test
public void rememberTest()
throws DuplicateException{

    try{
        personA.remember(sighting4);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        personA.remember(sighting3), //this will throws Exception if sighting3 is already in.
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}

演示编辑您的代码:

@Test
public void rememberTest()
throws DuplicateException{

    Sighting s1=//initialize s1
    Sighting s2=s1;
    try{
        personA.remember(s1);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        personA.remember(s2), //This will throw an exception because s1 and s2 are pointed to the same object
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}

答案 1 :(得分:1)

我认为不应该使用断言,你应该使用@Expected注释,因为它是一个测试用例,所以需要DuplicateException

答案 2 :(得分:0)

为了抛出异常并在测试类中捕获它,做一些这样的事情:

 try{
            personA.remember(sightingSame);
        }
        catch (DuplicateException e) {
            assertEquals("The list already contains this sighting", e.getMessage());
        }
        catch (Exception e) {
            fail("Failed" + e.getMessage());
        }