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