Java-Junit /对Junit方法的误解

时间:2012-04-22 15:37:51

标签: java junit

我有一个方法:doctorQueue,它有三个参数:数据类型(通过java.util.Date),时间和ID(字符串)。

返回值为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)

我当然理解它,但我怎么能检查功能,它返回的值是无效的?

5 个答案:

答案 0 :(得分: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 :(得分: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
}

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

答案 2 :(得分: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

答案 3 :(得分:0)

添加医生后检查队列是否已更改。

答案 4 :(得分:0)

  

我怎么能检查函数,它的返回值是无效的?

你做不到。你只能检查它是否应该抛出一个例外,例如不良论点等,并通过Assert.fail()发送通知 你可以做的是创建一个包装方法来检查这个方法的副作用并返回truefalse并从断言中调用