Android 如何测试新按钮()?
我有一些ButtonCreator.class,可以通过模型创建Android UI元素。你知道如何测试它吗Android 如何测试新按钮()?,android,button,junit,powermock,Android,Button,Junit,Powermock,我有一些ButtonCreator.class,可以通过模型创建Android UI元素。你知道如何测试它吗 public class ButtonCreator { Button createWidget(ButtonComponent buttonComponent, Context context) { Button button = new Button(context); button.setText(buttonComponent.getTe
public class ButtonCreator {
Button createWidget(ButtonComponent buttonComponent, Context context) {
Button button = new Button(context);
button.setText(buttonComponent.getText());
return button;
}
}
我写了一个测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Button.class, Context.class, ButtonCreator.class})
public class CreaterButtonTest {
@Mock
Context mContext;
@Mock
Button mButton;
@Test
public void createWidget() {
PowerMockito.whenNew(Button.class).withAnyArguments(). thenReturn(mButton);
ButtonCreator buttonCreator = new ButtonCreator();
ButtonComponent buttonComponent = new ButtonComponent();
buttonComponent.setText("someText");
Button buttonActual = buttonCreator.createWidget(buttonComponent, mContext);
assertThat(buttonActual.getText(), is("someText"));
}
}
但是在buttonActual.getText()中,我有一个空值。请帮助解决问题。关于mock,需要了解的重要一点是,除非您指定行为,否则它们永远不会作为原始对象运行 就你而言: Mocked按钮将接收setText()的调用,但由于它是一个Mocked对象,它没有任何内部状态来存储文本字符串,因此它将正确返回null。 您可以指定返回字符串的行为,如下所示:
when(mButton.getText()).thenReturn("mytext");
但这并不是可选的,因为最终您将测试模拟框架的工作方式
在这些情况下,您应该使用verify方法。每个模拟对象在其生存期内记录所有方法调用
verify(mButton, times(1)).setText("someText"));
有了它,您就可以确保准确的方法调用正在发生