我正在为服务层编写测试(not仪器测试)。我想使用实际的DAO层代替模拟,因为这会使服务层测试更具功能性(IMHO)。我知道如何创建一个用于测试的内存室内数据库:
val context = ApplicationProvider.getApplicationContext<Context>()
db = Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java).build()
但是,这在其他测试中将不起作用,因为对getApplicationContext
的调用会导致对InstrumentationRegistry
的调用,而在非仪器测试中则无效。我意识到房间测试应该是仪器测试。他们是。所有DAO测试都是仪器测试,旨在测试已编写的查询。我也意识到这些从技术上讲不是单元测试;我可以。以我的经验,不模拟存储库层的服务层测试的脆弱性要小于那些。无论如何,我的问题是-我怎样才能实现这个目标?有没有一种方法无需工具即可检索应用程序上下文?是否有一个不需要应用程序上下文的房间数据库替身?还是我需要为测试实现另一个版本的DAO类?