设置Greendao会话对象进行JUNIT测试



我正在尝试创建一个greenDAO数据库会话对象,以在我的junit测试中使用。当我尝试获取SQLiteDatabase对象时,我总是会得无效。没有返回错误,我不知道为什么。

在代码下方:

@RunWith(MockitoJUnitRunner.class)
public class ChatRoomModuleTest {
    SomeEntityDao someEntityDao;
    @Mock
    Context mMockContext;
    @Rule
    public MockitoRule mockitoRule = MockitoJUnit.rule();
    @Before
    public void Before(){
        DaoMaster.DevOpenHelper openHelper = new  DaoMaster.DevOpenHelper(mMockContext, "myapp-db", null);
        SQLiteDatabase db = openHelper.getWritableDatabase(); //always return null;
        DaoSession daoSession = new DaoMaster(db).newSession();
        someEntityDao = daoSession.getSomeEntityDao();
    }
}

注意:我知道我可以使用Android测试对其进行测试,但是它们对于测试独立平台逻辑的慢速和不必要。

找到了解决方案并涉及多个步骤:

1(使用Robolectric软件包能够创建应用程序

在app.gradle add:

//if your project use multidex
testCompile "org.robolectric:shadows-multidex:3.0"
//otherwise use
//testCompile 'org.robolectric:robolectric:3.1'

2(这样构建您的测试课程:

@RunWith(RobolectricGradleTestRunner.class) //run test with roboteletric
@Config(constants = BuildConfig.class, sdk = 19)
public class test {
    MyEntityDao myEntityDao;
    DaoSession daoSession;
    @Before
    public void setUp() {
//use roboteletric to create a valid Application Object
        DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(RuntimeEnvironment.application, null, null);
        SQLiteDatabase db = openHelper.getWritableDatabase();
        Assert.assertNotNull(db);
        daoSession = new DaoMaster(db).newSession();
        myEntityDao = daoSession.getMyEntityDao();
    }

    @Test
    public void t1() {
        MyEntity myEntity = new MyEntity();
        myEntityDao.insert(MyEntity);
    }
}

3(最终在此处发布的测试定义工作目录,以便robolectric可以找到项目清单文件。

我不确定目前是否会在其他测试上持续工作,也许最好使用Android测试。Greendao似乎并未量身定制以在Android之外使用。

相关内容

  • 没有找到相关文章

最新更新