如何模拟本地最终变量

时间:2015-08-07 18:01:44

标签: java unit-testing reflection mockito

我的方法中有一个局部变量是最终的。我怎么能嘲笑?

public void method(){
  final int i=myService.getNumber();
}

我想模仿

when(myService.getNumber()).thenReturn(1);

如何通过模拟完成它?

我的项目是使用Java 7,有没有办法使用反射或其他东西来实现这个模拟

1 个答案:

答案 0 :(得分:1)

如上所述,此请求没有多大意义。模拟系统不会模拟变量(或字段)。但是,您可以轻松地将字段设置为您已模拟的对象。你的测试看起来像这样:

@Test public void methodWithNumberOne {
  MyService myService = Mockito.mock(MyService.class);
  when(myService.getNumber()).thenReturn(1);

  // You might want to set MyService with a constructor argument, instead.
  SystemUnderTest systemUnderTest = new SystemUnderTest();
  systemUnderTest.myService = myService;

  systemUnderTest.method();
}

设置它的另一种方法不需要模拟:

public void method() {
  method(myService.getNumber());
}

/** Use this for testing, to set i to an arbitrary number. */
void method(final int i) {
  // ...
}