0

我对 JMockIt 完全陌生。在本教程中,我看到了将final修饰符用于 @Mocked 参数的示例代码,例如

  @Test
   public void doSomethingHandlesSomeCheckedException(@Mocked final DependencyAbc abc) throws Exception
   {
    ...
   }

最终模拟参数在这里是什么意思?有时,不使用“final”。有什么区别?

4

2 回答 2

1

这只是一个 Java 语言问题,与 JMockit 本身无关。对于要在内部类(匿名或非匿名)中使用的方法参数或局部变量,Java 编译器要求将其声明为final.

于 2013-11-18T12:12:17.710 回答
0

来自 JMockit 教程:

“对于在测试方法中声明的mock参数,在调用测试方法时,JMockit会自动创建一个声明类型的实例,并由JUnit/TestNG测试运行器传递。因此,参数值永远不会为空。

对于模拟字段,声明类型的实例将由 JMockit 自动创建并分配给该字段,除非它是最终字段。在这种情况下,应该在测试代码中显式地创建一个值并将其分配给该字段。不过,这个值可以为空,如果只调用构造函数和静态方法,这对于模拟类是完全有效的。”

http://jmockit.googlecode.com/svn/trunk/www/tutorial/BehaviorBasedTesting.html#declaration

请记住,模拟参数/字段是用@Mocked 或@Injectable 注释的。

于 2013-11-15T17:30:06.730 回答