如何在GwtMockito中模拟相同类型的多个字段

时间:2013-12-27 18:13:27

标签: gwt mocking

我知道@GwtMock注释在使用GwtMockitoTestRunner运行时会创建一个特定类型的模拟,但是如果我的小部件中有多个特定类型的项目会怎么样?例如,如果我的小部件中有许多按钮或许多锚点,是否有办法为每个按钮单独创建模拟?

现在我想在我的测试中绕过这个缺点,比如

@GwtMock mockButtonn;

然后在

when(mockButton.something()).thenReturn(value1,value2,value3,...)

所以我可以根据调用顺序区分按钮。但这绝对是不可维护的。有人可以建议替代方案吗?

1 个答案:

答案 0 :(得分:1)

使用GwtMockito生成的模拟有几种不同的方法,如果您还没有,请查看http://google.github.io/gwtmockito/处的文档。这取决于您如何创建小部件:

  1. 如果您通过UiBinder创建小部件(使用@UiField注释的字段),则无需执行任何特殊操作 - 当您致电{{1}时,他们将自动填充模拟内容}。然后,您可以直接在测试中引用它们,例如createAndBindUi。这是有效的,因为字段必须是UiBinder的包私有,所以你可以从你的测试中看到它们。
  2. 如果您通过构造函数或其他方式(dependency injection)将小部件传递到您的班级,则只需使用正常的Mockito when(myClass.myLabel.getText()).thenReturn("some text")注释声明测试中的字段。 GwtMockito将调用Mockito自动填充这些内容,但除此之外,它与任何其他Mockito模拟一样。
  3. 如果您通过@Mock创建小部件,则GWT.create很有价值。 @GwtMock@GwtMock之间的唯一区别是,@Mock也可以使@GwtMockGWT.create的任何调用都返回使用@GwtMock注释的对象。因此,使用@GwtMock注释相同类型的多个字段并不合理,因为GWT.create只能返回其中一个字段。
  4. 如果您直接通过new创建小部件,请不要这样做!创建假版本进行测试是不可能的,你应该使用依赖注入。
  5. 1和2是迄今为止最常见的情况 - 实际上必须使用@GwtMock有点不常见。