javajunit/对Junit方法的误解
我有一个方法:javajunit/对Junit方法的误解,java,junit,Java,Junit,我有一个方法:doctorQueue,它获取三个参数:数据类型(按java.util.Date)、时间和ID(字符串) 返回值为void,如果同时已经有队列,则给出一个exeption 我使用Junit编写了下一个方法: public void checkQueueDoctor(){ Date date = new Date (2012,4,25); Time time = new Time (13, 0, 0); assertTrue(doctorQueue("83849829", date,
doctorQueue
,它获取三个参数:数据类型(按java.util.Date)、时间和ID(字符串)
返回值为void
,如果同时已经有队列,则给出一个exeption
我使用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
}
它给了我下一个问题:类型Assert中的方法assertTrue(boolean)不适用于参数(void)
我当然理解它,但我如何检查函数,它返回的值是无效的?检查队列在添加医生后是否已更改。检查队列在添加医生后是否已更改 我如何检查函数,它返回的值是否为空 你不能。您只能检查它是否在本应引发异常(如错误参数等)时引发异常,并通过
Assert.fail()
您可以创建一个包装器方法来检查此方法的副作用,并返回
true
或false
,然后从assert调用它
我如何检查函数,它返回的值是否为空
你不能。您只能检查它是否在本应引发异常(如错误参数等)时引发异常,并通过Assert.fail()
您可以创建一个包装器方法来检查此方法的副作用,并返回
true
或false
并从assert调用它。如果您想测试void方法是否引发异常,一个常见模式是:
try {
doctorQueue("83849829", date, time);
// if we make it to this line, success!
} catch (Exception e) {
fail("queue adding threw an exception");
}
如果您在另一种情况下希望检查该方法是否引发异常,只需将fail调用移动到另一个块:
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!
}
(顺便说一句,在这两种情况下,捕获一个更具体的异常可能比只捕获
异常要好。)如果要测试异常不是由void方法引发的,常见的模式是:
try {
doctorQueue("83849829", date, time);
// if we make it to this line, success!
} catch (Exception e) {
fail("queue adding threw an exception");
}
如果您在另一种情况下希望检查该方法是否引发异常,只需将fail调用移动到另一个块:
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!
}
(顺便说一句,在这两种情况下,捕获更具体的异常可能比只捕获异常
要好。)
这就足够了。如果抛出异常,测试将自动失败
这就足够了。如果抛出异常,测试将自动失败。如果使用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);
}
如果您使用的是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);
}
如果要测试异常不是由方法引发的,只需调用该方法即可。通过调用该方法尝试。。。catch,您正在隐藏原始异常如果要测试异常不是由方法引发的,只需调用该方法即可。通过调用该方法尝试。。。注意,您正在隐藏原始异常我认为问题在于如何测试是否未引发异常。我相信你的测试异常的例子对于海报想要测试的其他场景很有用,但我认为问题是如何测试是否没有抛出异常。我相信您测试异常的示例对于海报想要测试的其他场景很有用