Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何模拟包含一些调用的异常_Java_Unit Testing_Junit_Powermock - Fatal编程技术网

Java 如何模拟包含一些调用的异常

Java 如何模拟包含一些调用的异常,java,unit-testing,junit,powermock,Java,Unit Testing,Junit,Powermock,我必须测试一个抛出异常的func() Exception的构造函数如下所示: Exception(){ var a = ContextHolder.get("Domain"); setDomain(a); } 现在,当函数抛出异常时,我正在做什么: try{ fun(); } catch(Exception e){ } 但它显示了一个断言错误,即异常构造函数中的意外调用get(“域”) 是否有任何方法可以验证该异常。您必须模拟contextHolder,并期望在contextHolder上

我必须测试一个抛出异常的func()

Exception的构造函数如下所示:

Exception(){
var a = ContextHolder.get("Domain");
setDomain(a);
}
现在,当函数抛出异常时,我正在做什么:

try{
fun();
}
catch(Exception e){

}
但它显示了一个断言错误,即异常构造函数中的意外调用get(“域”)


是否有任何方法可以验证该异常。

您必须模拟contextHolder,并期望在
contextHolder上调用
get(“域”)
。在中,我回答了一个类似的问题,也许你可以使用它。

看起来像C代码,但它用Java标记。请确认。
如果是C#,你可以使用Moq这样的模拟框架。此外,您必须重新考虑代码以删除静态函数调用-它们是不可测试的

var
做什么?var只是一种数据类型,将其视为StringI不会在异常构造函数中放入任何复杂的代码。那肯定会引起问题。。为什么不改为在catch块中执行域代码?什么是
ContextHolder
,为什么对其调用方法会给您一个
AssertionError
?这是一个轻松的模仿还是什么?请告诉我们更多关于您实际正在做的事情。如果您感兴趣的只是fun(),并且Exception类无法修改,那么您可以使用PowerMockito模拟Exception()构造函数。请参阅静态函数调用是可测试的,它看起来像Javascript。这个‘变量’是什么?这在Java中是新事物吗?@TomJonckheere是的,你是对的。静态函数是可测试的,但当涉及到一点灵活性时,这是一种糟糕的做法。另外,我觉得创建这个静态函数只是为了保存一些击键。我添加了一个链接到前面的答案。实际上,我认为不模仿contextHolder会更好。问题似乎是contextHolder是一个mock,它不需要是。@DavidWallace我理解你的观点,但我们不能确定,根据给定的代码,contextHolder应该还是不应该是mock。所以我认为Kapil有充分的理由使用模拟对象。我们无法确定代码中的任何内容。这就是为什么我没有发布答案。比如,
ContextHolder
是一个类,其中
get
是一个静态方法吗?还是某种变量?我们所知道的只是“在某个地方我们可以获得所需的数据”,不管这意味着什么。我觉得这个问题以目前的形式无法回答。