【发布时间】:2011-07-12 00:37:00
【问题描述】:
我正在使用 groovy 为我的 java 项目编写单元测试(我建议大家尝试一下) 我的单元测试之一是测试测试代码(在 java 中)是否捕获特定类型的异常并重新引发应用程序异常:
java代码(测试中):
try
{
dao.save(obj)
}
catch(DataIntegrityException dupex)
{
....
throw new AppException("duplicate name");
}
groovy 测试代码使用 groovy 的闭包映射模拟(代理)dao 调用
[ save:
{ obj->
...
throw new DataIntegrityException("duplicate"); //DataIntegrityException is a runtime exception (unchecked)
}
] as DAO;
非常简单。但是,在执行测试类时,实际抛出的异常是 groovy 的 runtime.Invoker.InvocationException 包装了 DataIntegrity 异常。显然,java 代码对 groovy 及其异常一无所知,因此不执行 catch 块。 我正在使用 Netbeans 7 实际执行测试,它只是使用 groovyc 将 groovy 文件编译成 java 类,因此它只是作为普通的 JUnit 测试执行。 有谁知道如何克服这个?在 groovy 的错误中找不到它,但肯定看起来像一个。
【问题讨论】:
-
试图重现,但不能。
DataIntegrityException有无参数构造函数吗? -
不,我只是为了简洁而忽略了它。
-
这是一个未经检查的(运行时异常),所以它应该是 new DataIntegrityViolation("message")。这不是问题,异常构造得很好,它只是被 InvocationException 包装了
标签: unit-testing testing netbeans groovy