我有一种方法可以检查几个条件,并在满足条件时调用另一个活动。当不满足条件时,它将显示一个错误对话框(当前正在使用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) 我正在尝试为 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