2012-04-22 49 views
0

我有一个方法:doctorQueue,它获得三个参数:数据类型(由java.util.Date),时间和ID(字符串)。Java-Junit/Junit方法的误解

返回值为void,如果在同一时间已经有队列,则给予豁免。

我写了一个方法,使用JUnit:

public void checkQueueDoctor(){ 
Date date = new Date (2012,4,25); 
Time time = new Time (13, 0, 0); 
assertTrue(doctorQueue("83849829", date, time)); 
..... // and so on 
} 

它给我的下一个问题:The method assertTrue(boolean) in the type Assert is not applicable for the arguments (void)

我当然明白了,但是我怎么可以检查函数,它返回的值是无效的呢?

回答

1
public void checkQueueDoctor(){ 
    Date date = new Date (2012,4,25); 
    Time time = new Time (13, 0, 0); 
    doctorQueue("83849829", date, time); 
    ..... // and so on 
} 

就足够了。如果抛出异常,测试将自动失败。

0

确认在添加医生后队列已更改。

0

我该如何检查函数,它返回的值是无效的?

你不行。你只能检查它是否应该抛出一个例外,坏参数等,并通过Assert.fail()
被告知你可以做的是创造一个检查这种方法的副作用的包装方法和返回truefalse,如果你想测试调用来自断言

1

如果有例外不是由一个void方法抛出,一个常见的模式是:

try { 
    doctorQueue("83849829", date, time); 
    // if we make it to this line, success! 
} catch (Exception e) { 
    fail("queue adding threw an exception"); 
} 

如果你有,你要检查确实抛出异常的方法,只要将不能调用其他情况另一块:

try { 
    doctorQueue(alreadyPresentElement, date, time); 
    fail("expected an exception but didn't get one!");  
} catch (Exception e) { 
    // we expected an exception and got it! Success! 
} 

(在这两种情况下,它可能更好地搭上了更具体的异常不仅仅是Exception,顺便说一句。)

+1

如果你想测试一个异常没有被抛出一个方法,只是调用该方法。通过调用该方法尝试... catch,你隐藏了原始异常 – NamshubWriter 2012-04-22 15:52:28

1

如果您正在使用JUnit 4,您可以检查预期的异常,例如:

@Test(expected = Exception.class) 
public void checkQueueDoctor() throws Exception { 
    Date date = new Date (2012,4,25); 
    Time time = new Time (13, 0, 0); 
    doctorQueue("83849829", date, time); 
} 

你可以看一下这个link

+1

我认为问题是如何测试是否抛出异常。我相信你的例子来测试一个异常对海报想要测试的其他场景很有用 – 2012-04-22 18:05:15