Roboletric无法使自定义对话框可见

时间:2018-12-04 18:14:33

标签: unit-testing android-fragments robolectric

我正在尝试为自定义对话框构建单元测试用例,以使用Roboletric扩展Android DialogFragment,但遇到了麻烦。基本上,单元测试框架不能使片段“可见”。因此,我无法进行任何测试。

无论如何,代码是非常基本的,并且基于以下线程:

How to create a Custom Dialog box in android?

这是我的应用代码:

```{r cars}
mtcars$am <- sprintf("&lpar;%s&rpar;", as.character(mtcars$am))
knitr::kable(mtcars, format = "html", escape = FALSE)
```

超级基本的自定义布局

public class CustomDialog extends DialogFragment {
    public Dialog mCustomDialogTest;
    public EditText mEditText;
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mCustomDialogTest = new Dialog(getActivity());
        mCustomDialogTest.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        mCustomDialogTest.getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        mCustomDialogTest.setContentView(R.layout.custom_dialog);
        mCustomDialogTest.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        mEditText = (EditText) mCustomDialogTest.findViewById(R.id.edit_text_id);
        return mCustomDialogTest;
    }
}

最后是我的单元测试:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <EditText
        android:id="@+id/edit_text_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:hint="@string/app_name"
        android:inputType="text" />
</LinearLayout>

它总是断言它是不可见的:(然而,代码在设备上工作正常。

这是gradle中的相关部分:

@Test
public void testCustomDialog() {
    CustomDialog customDialog = new CustomDialog();
    customDialog.show(mActivity.getFragmentManager(), getClass().getName());

    boolean visible = customDialog.isVisible(); //This never works :(
    Assert.assertTrue("Dialog is visible", visible);
}

有人可以帮助我吗?我完全依赖于单元测试的最基本功能。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用$('.x').val() == 'Y' 方法而不是getUserVisibleHint方法