以下代码无法编译,因为无法访问的catch块。
我想写“tues”函数并在许多其他单元测试函数中调用它。
这可能吗?如何实现?
private void catchException(boolean condition) {
try
{
assertTrue(condition);
}
catch (SomeException e)
{
fail("exception = " + e.getMessage());
}
}
谢谢!
答案 0 :(得分:4)
无需在测试方法中捕获异常以使其失败:
public Object methodUnderTest() throws SomeException {
...
}
@Test
public void testMethod() throws SomeException() {
Object obj = methodUnderTest();
assert...
}
如果SomeException
引发methodUnderTest()
,则testMethod()
将失败。
答案 1 :(得分:2)
你的代码存在的问题是assertTrue
不会抛出SomeException
,如果用它替换它的函数,它会编译。
答案 2 :(得分:2)
我不完全确定你在这里问的是什么,但你发布的代码有些问题。
如果try中的代码可能会抛出您正在捕获的相同类型的异常,则只能为已检查的异常设置catch块。由于必须在方法的throws子句中声明已检查的异常,因此可以检查是否正在调用的任何方法抛出正在捕获的异常类型。来自assertTrue上的JUnit文档:
public static void assertTrue(boolean condition)
您可以看到它不会抛出任何已检查的异常。
此外,在JUnit测试中调用catch块中的fail()
并不是必需的。如果抛出未捕获的异常,单元测试将自动失败。
答案 3 :(得分:1)
只需将throws WhateverException
添加到测试签名中,如果抛出异常,测试将失败。
答案 4 :(得分:1)
实际上并不清楚您使用代码实现了什么。如果你想在jUnit触发的异常中有一个格式正确的消息,如果你的断言失败,那么考虑用这种方式编写它:
assertTrue("Condition should hold because....", conditionToCheck);
这样,如果检查失败,jUnit将打印您提供的消息。我强烈推荐这一点,特别是如果你有很多测试,因为它
答案 5 :(得分:0)
按SomeException
修改Exception
将导致代码编译。
答案 6 :(得分:-1)
显然我的问题不明确。
我有很多单元测试,所有方法都抛出相同的异常,并带有不同的错误信息。 “SomeException”是我必须捕获的异常,并从中读取错误消息。
我想要实现的是编写一种方法,这种方法对于所有单元测试都是通用的,并且我可以在其中打印错误消息。
现在单元测试看起来像这样
public void test_something()
{
try
{
assertTrue(bw.doSomething("test"));
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
}
public void test_something1()
{
IBroadworks bw = getSomehting1();
try
{
assertTrue(bw.doSomething1("test1"));
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
}
...
所以下面的代码在所有单元测试中重复,这是不行的。
...
try{
assertTrue(condition);
}
catch (SomeException e)
{
fail("exception = " + e.getReason());
}
...