Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何测试新按钮()?_Android_Button_Junit_Powermock - Fatal编程技术网

Android 如何测试新按钮()?

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

我有一些ButtonCreator.class,可以通过模型创建Android UI元素。你知道如何测试它吗

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"));
有了它,您就可以确保准确的方法调用正在发生