android studio Test类测试ormlite数据库问题

今天初次使用ormlite包编写数据库项目,中间遇到教程中的一个问题,即编写测试类测试增删改查函数时 

有一行代码DatabaseHelper helper = DatabaseHelper.getHelper(getContext()); 该代码在eclipse下能完整运行

可在android studio 下会出现一个问题 所getContext 为null。导致无法打开数据库文件。

网上解决方法有:

1 new MockContext();

2 getInstrument().getContext();

3Context appContext = InstrumentationRegistry.getTargetContext();

均不能解决问题最终context 仍为null;

解决思路是:

开始以为是路径权限有问题。

后来查出是:使用Android JUnit Test方式测试A工程。而A工程和Test工程 是两个独立的工程。

造成A工程建立了数据库,在Test工程中访问受限。

最终 解决办法是:

好了!我要开始变身了!下面我们要向testing的世界say hello了!
我在package-name/module/main包下面有一个MainActivity,作为答疑君的启动页。在这个启动页上会显示一段文字,我希望通过自动化测试来确认这个文字确实显示在了屏幕上。

于是,我应该在androidTest/package-name/module/main下面创建一个AppStartActivityTest类,键入如下代码:

package im.dayi.app.student.module.main;

import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * Test for AppStartActivity
 * Created by Anchorer on 2016/1/13.
 */
@RunWith(AndroidJUnit4.class)
public class AppStartActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

    private MainActivity mActivity;//定义一个mainactivity类
    
    public AppStartActivityTest() {
        // 所有的ActivityInstrumentationTestCase2子类都需要调用该父类的super(String)构造方法
        super(MainActivity.class);
    }

    @Before
    public void setUp() throws Exception {
        super.setUp();
        // @Before注解表示在执行所有的testCase之前要做的事情
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());

        // getActivity()方法会在开始所有的testCase之前启动相应的Activity
        mActivity = getActivity();
        // 获取MainActivity 的context 
      DatabaseHelper helper = DatabaseHelper.getHelper(mActivity);
    }

    @Test
    public void testPreconditions() {
        // @Test注解表示一个测试用例方法
        assertNotNull("AppStartActivity is null", mActivity);
    }

   
}
其实质就是将MainActivity 作为参数传进Test类

这样在类中调用DatabaseHelper helper = DatabaseHelper.getHelper(MainActivity);

即可将Test工程访问Main工程。

最终实现访问ormlite 数据库默认地址//data/data/com.exampel.ormlitedemo/databases/sqlite_test.db(我的地址)

posted @ 2017-10-13 21:03  Mr.zzz  阅读(40)  评论(0编辑  收藏  举报