android - 如何将模拟对象放入 Activity 的 onCreate() 中?

标签 android automated-tests

我有一个使用对象的 Activity 。为了进行测试,我想模拟这个对象,但我找不到如何让 Activity 在 onCreate() 函数中使用模拟对象。

我正在使用 AndroidMock 在测试中创建模拟对象和 Robotium。例如:

应用程序(标准 Android 项目):

class MainActivity extends ... {
    MyObject obj;
    MainActivity() {
        obj = new MyObject();
    }
    void onCreate(Bundle b) {
        obj.doSomething();
        ...
    }
}

测试(标准 Android 测试项目):

class MainActivityTest extends ... {
    @UsesMocks(MyObject.class)
    public void testMyObject() {
        // create the mock object
        MyObject o = AndroidMock.createMock(MyObject.class);
        AndroidMock.expect(o.doSomething()).andReturn(false);
        AndroidMock.replay(o);

        // Here some code which makes the activity use the mock object
        // and calls the onCreate() function on the activity.

        // Do some tests on the activity.
        Solo solo = new Solo(getInstrumentation(), getActivity());
        Assert.assertTrue(solo.searchText("It works!")); 
        AndroidMock.verify(o);
    }
}

最佳答案

我知道这两种方式。

  1. 使用 DI Conrainer。 Robojuice

    @inject
    MyObject obj;
    
  2. 继承被测类

Activity

    class DummyMainActivity extends MainActivity {
        Bundle b;
        @Override
        void onCreate(Bundle b) {
            this.b = b;
        }
        void onCreateSuper() {
            super(b);
        }
    }

测试

    class MainActivityTest extends ActivityUnitTestCase<DummyMainActivity> {
        @UsesMocks(MyObject.class)
        public void testMyObject() {
             // create the mock object
             MyObject o = AndroidMock.createMock(MyObject.class);

            DummyMainActivity activity = startActivity(new Intent(), null, null);
            activity.obj = o;

            activity.onCreateSuper();
            AndroidMock.verify(o);
        }
    }

关于android - 如何将模拟对象放入 Activity 的 onCreate() 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12708048/

相关文章:

iOS 自动化 : how to tap button that has no id

java - 使用 Selenium 取消焦点窗口

.net - dotnet test 不会使用通配符递归搜索文件夹中的 .csproj

带有自定义 View 选项卡的 Android TabLayout - 图标单击不会切换选项卡

java - Android ArrayList<String[]> 到 PHP

android - 处理程序延迟 60 秒不工作?

android - 如何截取屏幕截图并以编程方式共享

android - 电子邮件未在 Firebase 中验证

django - 我应该如何测试数据库驱动的 Django CMS 是否出现 404 错误?

testing - Selenium 测试用例与测试套件与一般用法