0

我正在使用 Robotium 自动测试应用程序。有没有一种方法可以在执行特定测试用例时显示警告框。

谢谢。

4

2 回答 2

1

有可能做到,几乎一切皆有可能,但在我给你答案之前,你有充分的理由这样做吗?我不能轻易找到为什么测试应该打开警报框的充分理由,但您可能最清楚。

Robotium有方法。

solo.getCurrentActivity();

使用它,您可以获得一个活动上下文,并且通过这样的事情,您几乎可以做任何您可以在 android 活动中做的事情。页面http://developer.android.com/guide/topics/ui/dialogs.html告诉我们如何制作对话框,您会注意到第一行调用了一个方法来获取 currentActivity,而不是我将其替换为上面的robotium方法。

// 1. Instantiate an AlertDialog.Builder with its constructor
  AlertDialog.Builder builder = new AlertDialog.Builder(solo.getCurrentActivity());

// 2. Chain together various setter methods to set the dialog characteristics
builder.setMessage(R.string.dialog_message)
       .setTitle(R.string.dialog_title);

// 3. Get the AlertDialog from create()
AlertDialog dialog = builder.create();

这将创建一个对话框,然后只需调用 dialogs .show() 方法将其显示在屏幕上。

于 2013-01-14T15:22:07.903 回答
0

Robotium 测试不在 UI 线程上运行,因此测试方法中的任何代码在最好的情况下都将不起作用,在最坏的情况下会抛出错误并导致测试失败。

要从测试方法内部与 UI 交互,您需要在 UI 线程上运行代码。这可以通过在 Runnable 中编写该代码并将该 Runnable 发送到runOnUiThread()当前 Activity 的方法来完成。Robotium 的独奏类具有getCurrentActivity()允许执行此操作的方法。这是一个如何使用此技术展示 Toast 的示例。

public void testDisplayToastInActivity() throws Exception
{
    Runnable runnable = new Runnable
    {
        @Override
        public void run()
        {
            Toast.makeText(solo.getCurrentActivity(), "Hello World", Toast.LENGTH_LONG).show();
        }
    }

    solo.getCurrentActivity().runOnUiThread(runnable);
 }

runOnUiThread()如果您想要的不仅仅是 Toast,您可以使用它来执行与 Activity 交互的许多其他操作,例如创建警报对话框。但是,我建议不要这样做,即使你可以。Robotium 和其他测试框架旨在判断您的应用程序代码执行的正确性,并且不应注入任何逻辑或 UI 修改行为,而不是像用户那样与您的应用程序交互。如果您从测试中获取任何输出并将它们记录到 Logcat 或文件中,您的测试将会更干净。

于 2013-01-14T16:16:13.297 回答