我对JMockIt完全不熟悉。在本教程中,我看到了对@Mocked参数使用 final 修饰符的示例代码,例如。
@Test
public void doSomethingHandlesSomeCheckedException(@Mocked final DependencyAbc abc) throws Exception
{
...
}
最终模拟参数在这里意味着什么?有时,不使用“最终”。有什么区别?
答案 0 :(得分:1)
这只是一个Java语言问题,与JMockit本身无关。对于要在内部类(匿名或非内部)中使用的方法参数或局部变量,Java编译器要求将其声明为final
。
答案 1 :(得分:0)
来自JMockit教程:
“对于在测试方法中声明的模拟参数,声明类型的实例将由JMockit自动创建,并在调用测试方法时由JUnit / TestNG测试运行器传递。因此,参数值永远不会为null
对于模拟字段,声明类型的实例将由JMockit自动创建并分配给字段,除非它是最终字段。在这种情况下,应该在测试代码中显式创建一个值并将其分配给该字段。但是,这个值可以为null,如果只调用构造函数和静态方法,这对于模拟类是完全有效的。“
http://jmockit.googlecode.com/svn/trunk/www/tutorial/BehaviorBasedTesting.html#declaration
请记住,模拟参数/字段是使用@Mocked或@Injectable注释的。