如何在Android库中进行本地单元测试私有方法?

3
我有一个公共方法需要进行单元测试。该方法在类内部调用了多个私有方法。问题在于,其中一些私有方法使用了 Android 资源,例如 getString() 和 Html.fromHtml()。
我知道如何使用 Mockito 模拟对象,例如 Context.class,但是如何模拟非公开访问的对象呢?
我尝试了使用 Robolectric,但由于未初始化变量导致出现大量 NPEs。代码库不属于我,使用了很多静态方法,所以调试它们将是最后的选择。
1个回答

3
很遗憾,无法模拟静态方法,比如Html.fromHtml()或者像Log.d()这样的日志记录方法。你需要依赖Robolectric来提供实现。
如果你想要进行完整的单元测试而不使用Robolectric,可以通过gradle的“test”目标来模拟Context和Resources等内容,并将可模拟的Android基础设施类添加到运行时类路径中。你不需要第三方软件来完成这个过程。但是,你的测试会因为调用Android静态方法而崩溃并显示“Stubbed!”消息。为了避免这种情况,你需要将所有这些静态方法调用封装到一个对象中,在测试期间模拟该对象。有点麻烦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接