相关疑难解决方法(0)

浓咖啡检查是否未显示对话框

我有一种方法可以检查几个条件,并在满足条件时调用另一个活动。当不满足条件时,它将显示一个错误对话框(当前正在使用DialogFragment显示警报对话框)。该方法如下所示:

void checkAndCall() {
    CustomObject o1 = null;
    try {
        o1 = CustomObject.parse(editText1.getText().toString());
    } catch (CustomException e) {
        handleBadCase(e);
        return;
    }

    CustomObject o2 = null;
    try {
        o2 = CustomObject.parse(editText2.getText().toString());
    } catch (CustomException e) {
        handleBadCase(e);
        return;
    }

    callOtherActivity();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我忘记了一个return语句,这导致该方法下降到下一个检查(失败)并显示两个错误对话框。我想确保不会再发生这种情况,因此为此编写了一个测试。

我的测试看起来像这样:

public class TestClass {

    @Rule
    public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<>(MyActivity.class);

    @Test
    public void onlyOneDialogAppearsWithEmptySolve() {
        /* Hit solve with no text entered */
        onView(withId(R.id.solve_button)).perform(click());

        /* Check that dialog is displayed */
        onView(isRoot()).inRoot(isDialog()).check(matches(isDisplayed()));

        /* Press cancel */
        onView(withText(getString(R.string.cancel))).perform(click()); …
Run Code Online (Sandbox Code Playgroud)

android automated-tests dialog android-espresso

5
推荐指数
1
解决办法
569
查看次数

如何在对话框片段上运行单元测试?

我正在尝试为 DialogFragment 创建一个独立的单元测试,以便 DialogFragment 可以单独进行测试。我正在使用 FragmentScenario 启动 DialogFragment,现在我正在尝试确认是否显示对话框消息,但最终我将测试按钮单击。

class ResetScoreDialog (val viewModel: MyViewModel) : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            // Use the Builder class for convenient dialog construction
            val builder = AlertDialog.Builder(it)
            builder.setMessage(getString(R.string.resetscore_dialog_message))
                .setPositiveButton(getString(R.string.confirm),
                    DialogInterface.OnClickListener { dialog, id ->
                        viewModel.resetScore()
                    })

            // Create the AlertDialog object and return it
            builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")

    }
}

Run Code Online (Sandbox Code Playgroud)

我的测试

@RunWith(RobolectricTestRunner::class)
class ResetScoreDialogTest {

    private lateinit var scenario: FragmentScenario<ResetScoreDialog>

    private lateinit var viewModel: MyViewModel …
Run Code Online (Sandbox Code Playgroud)

android android-dialog android-dialogfragment android-espresso

3
推荐指数
1
解决办法
1725
查看次数