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

来源:互联网 发布:javascript setdate 编辑:程序博客网 时间:2024/05/19 14:16

今天初次使用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(我的地址)

原创粉丝点击