我正在对包含自定义对话框的应用程序进行单元测试。该对话框继承自android.app.Dialog,但是需要Activity的特殊子类,我们称它为CustomActivity,它提供了所需的一些功能。

我想避免从已测试的应用程序实例化“活动”之一,因为我已经对其进行了测试。我正在进行单元测试,而不是黑盒测试,因此我想在对话框中运行所有公共功能。但是,如果没有先实例化对话框并且这需要一个CustomActivity实例,这是不可能的。

我尝试创建CustomActivity的模拟子类并使用它来启动对话框,但是我一直遇到相同的问题:测试应用程序不是在测试应用程序中寻找活动,而是在被测应用程序中寻找活动。所以我得到“无法解决活动”。

我也尝试过自己创建活动,而不使用Instrumentation.launchActivity,但这需要一个上下文,而在InstrumentationTestCase下却没有。如果我改用AndroidTestCase,则提供的上下文(通过getContext)只是一个ContextWrapper,它似乎没有包装任何上下文,因此我回到正题。我需要先实例化该活动。

我已经在Google上搜索了很多,而且我不敢相信自己是第一个需要对Dialog进行单元测试的人。在我看来,除了提供必需上下文的对话框外,我还需要与ActivitiTestCase2类似的内容。

创建对话框的最佳方法是什么?我还没有尝试过其他方法吗?有没有人提供自定义对话框单元测试的示例?

最佳答案

这听起来像是一个面向对象的问题,而不是一个Android问题。我认为您的核心问题可能是各班级之间的紧密联系。尝试在CustomActivity前面引入一个仅暴露对话框所需功能的接口,然后在测试中模拟该接口,而不是尝试创建活动本身的模拟子类。祝好运!

10-06 14:12
查看更多