Android ROOM道类插入查询的单元测试覆盖率为75%。如何实现100%的代码覆盖率?

时间:2019-04-29 00:08:50

标签: android junit code-coverage android-room android-instrumentation

[道插入查询覆盖率] [75%]

我试图介绍Android Room DAO类的单元测试用例。 “插入”查询代码的覆盖率仅为75%。如何达到100%?通过Jacoco插件检查代码覆盖率。

我有CategoryDaoTest工具测试类,该类测试与“ category”表相关的所有查询。 我有CategoryDao类,其中包括对表“ category”的所有查询 测试通过,但插入的代码覆盖率显示75%。在Jacoco插件中,getCategories()的代码覆盖率显示为100%。

@Dao
interface CategoryDao {

    @Query("SELECT * FROM category")
    fun getCategories(): LiveData<List<Category>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(category: Category)
}

@RunWith(AndroidJUnit4::class)
class CategoryDaoTest {

    @Rule
    @JvmField var instantTaskExecutorRule = InstantTaskExecutorRule()

    private lateinit var appDatabase: AppDatabase
    private lateinit var categoryDao: CategoryDao

    @Before
    @Throws(Exception::class)
    fun initDb() {
        appDatabase = Room.inMemoryDatabaseBuilder(
            InstrumentationRegistry.getInstrumentation().targetContext,
            AppDatabase::class.java
        ).allowMainThreadQueries().build()
        categoryDao = appDatabase.categoryDao()
    }

    @After
    @Throws(IOException::class)
    fun closeDb() {
        appDatabase.close()
    }

    @Test
    @Throws(InterruptedException::class)
    fun onFetchingCategory() {
        val categoryList = LiveDataTestUtil.getValue(categoryDao.getCategories())
        Assert.assertTrue(categoryList.isEmpty())
    }

    @Test
    @Throws(InterruptedException::class)
    fun onInsertingACategory() {
        val createdData = CategoryFactory.makeCategory()
        categoryDao.insert(createdData)

        val categoryList = LiveDataTestUtil.getValue(categoryDao.getCategories())
        Assert.assertTrue(categoryList.isNotEmpty())
        Assert.assertTrue(categoryList.size == 1)
    }
}


  [1]: https://i.stack.imgur.com/HvW9q.png

0 个答案:

没有答案