我知道@GwtMock注释在使用GwtMockitoTestRunner运行时会创建一个特定类型的模拟,但是如果我的小部件中有多个特定类型的项目会怎么样?例如,如果我的小部件中有许多按钮或许多锚点,是否有办法为每个按钮单独创建模拟?
现在我想在我的测试中绕过这个缺点,比如
@GwtMock mockButtonn;
然后在
when(mockButton.something()).thenReturn(value1,value2,value3,...)
所以我可以根据调用顺序区分按钮。但这绝对是不可维护的。有人可以建议替代方案吗?
答案 0 :(得分:1)
使用GwtMockito生成的模拟有几种不同的方法,如果您还没有,请查看http://google.github.io/gwtmockito/处的文档。这取决于您如何创建小部件:
@UiField
注释的字段),则无需执行任何特殊操作 - 当您致电{{1}时,他们将自动填充模拟内容}。然后,您可以直接在测试中引用它们,例如createAndBindUi
。这是有效的,因为字段必须是UiBinder的包私有,所以你可以从你的测试中看到它们。when(myClass.myLabel.getText()).thenReturn("some text")
注释声明测试中的字段。 GwtMockito将调用Mockito自动填充这些内容,但除此之外,它与任何其他Mockito模拟一样。@Mock
创建小部件,则GWT.create
很有价值。 @GwtMock
和@GwtMock
之间的唯一区别是,@Mock
也可以使@GwtMock
对GWT.create
的任何调用都返回使用@GwtMock
注释的对象。因此,使用@GwtMock
注释相同类型的多个字段并不合理,因为GWT.create
只能返回其中一个字段。new
创建小部件,请不要这样做!创建假版本进行测试是不可能的,你应该使用依赖注入。 1和2是迄今为止最常见的情况 - 实际上必须使用@GwtMock
有点不常见。