我有一个公共方法,我正在对其进行单元测试。该方法调用类中的多个私有方法。问题是其中一些私有方法使用Android资源,如getString()和Html.fromHtml()。
我知道如何使用 Mockito 模拟像 Context 这样的对象.class但是我如何模拟不可公开访问的对象?
我尝试了 Robolectric,但由于未初始化的变量,它似乎会导致大量 NPE。代码库不是我的,并且使用了很多静态方法,因此调试它们是最后的手段。
可悲的是,不可能模拟静态方法,如 Html.fromHtml() 甚至日志记录方法,如 Log.d()。 您依靠 Robolectric 通过为您提供实施来帮助您。
如果你想在没有 Robolectric 的情况下进行完整的正确单元测试,你可以使用 gradle "test" 目标来模拟上下文和资源等内容,该目标将可模拟的 android 基础设施类添加到运行时类路径中。 您不需要第三方软件来执行此操作。 但是,对于 Android 静态方法调用,您的测试将崩溃并显示"存根!"消息。 为了避免这种情况,您必须将所有这些静态方法调用包装到一个对象中,然后在测试期间模拟该对象。 有点痛苦。