【问题标题】:Writing SQLiteOpenHelper test cases in JUnit4 and Mockito在 JUnit4 和 Mockito 中编写 SQLiteOpenHelper 测试用例
【发布时间】:2016-03-02 03:48:48
【问题描述】:

我正在尝试为我的数据库编写测试用例。

我有一个扩展至 SQLiteOpenHelper 的辅助类

DBHelper.java
       public DBHelper(Context context) {
            super(context, DBConstants.DATABASE_NAME, null, DBConstants.DATABASE_VERSION);
        }

以及一个包含所有插入删除等的构造函数类。

DBController.java
      public DBController open() throws SQLException {
            dbHelper = DBHelper.getInstance(context);
            database = dbHelper.getWritableDatabase();
            return this;
        }

我的测试课

DBControllerTest.java
@Mock
    Context mContext;
    DBController dbController;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        RenamingDelegatingContext context = new RenamingDelegatingContext(mContext, "test_");
        dbController = new DBController(context);
        dbController.open();
    }

这里当我执行 dbController.open() 时,dbHelper.getWritableDatabase() 总是返回 null。

我该如何解决这个问题。我也在以正确的方式嘲笑它。我对此进行了很多搜索,但没有找到解决方案。测试数据库查询的最佳方法是什么。

【问题讨论】:

    标签: android sqlite junit mockito junit4


    【解决方案1】:

    你不能这样模拟Context,你需要使用仪器的Context。由于此测试需要 Android 代码并因此需要插桩,因此请确保将其放入您的测试中的 androidTest 目录中。

    请参阅this 答案以获取示例。

    【讨论】:

    • 我如何为单元测试用例和仪器测试用例使用依赖,即使用 mockito 作为 androidTestCompile 和 testCompile。
    • @Rohit_Ramkumar 两者都声明,例如testCompile <mockito> androidTestCompile <mockito>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多