假设我有一个测试类,里面有一些mock。Lint建议字段可以是私有的。我想知道,把它们保密有问题吗?我的一位同事认为,也许这会导致Mockito使用反思。这是真的吗?或者我可以安全地将它们标记为私有吗?
@Mock private Context context;
与
@Mock Context context;
官方的Android文档在Kotlin版本上是私有的,但在Java版本上没有(在撰写本问题时)。https://developer.android.com/training/testing/unit-testing/local-unit-tests#kotlin
我环顾四周,在谷歌上搜索了一下,但我不确定,因为我能找到的任何地方都没有明确提到它,有些参考文献是私人的,而另一些则没有。
在这两种情况下,测试运行良好,所需时间大致相同(10秒)。因此,我认为最好将其标记为私有,并删除lint错误。可能的不利因素是什么?
据我所知,反思与价值是否私人无关。似乎更多的是它是否能看到mock类中的方法。如果类中的这些方法是私有的,那么它将需要使用反射。
如果需要,可以将字段设为私有字段,反射也可以使用私有字段。
我个人会考虑最佳实践,并在需要时将变量作为getter和setter方法的私有变量。
Android中对反射的"限制"仅适用于在应用程序中的设备上运行的代码。单元测试不必遵守这一原则,因为它们是在计算机上运行的,不会出现在应用程序中。
我总是在测试类中使用私有属性,从未遇到过任何问题。
更新:查看源代码后,Mockito似乎使用反射来实例化@mmock属性,无论它们是私有的还是公共的。