我是编程新手并且有一个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);
}
如果您需要更多信息,请提出要求,我会根据需要发布。
答案 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());
}