我们可以使用Android Mock对Android应用程序的私有函数和字段进行单元测试吗?
如果是,请解释如何?
答案 0 :(得分:6)
单元测试私有方法,对我来说听起来有点不对劲。公共和受保护的方法是单元测试的候选者。只是为了测试私有方法,你可以将方法公之于众,或者创建更多调用私有方法的公共方法的测试,并测试私有方法的核心功能。
答案 1 :(得分:2)
一年后,我还推出了一个图书馆来帮助测试私人方法和领域。我相信在Android上仍然需要测试私有方法。
你想让你的活动的方法变得私有,以防止其他类认为他们可以访问它(片段可以,但这对我来说是错误的练习,最好使用可观察的观察者模式)。然后,您将得到仅需要通过测试访问的私有字段和方法。
BoundBox正是这样做的!以下是访问活动的2个私有字段以进行测试的测试示例:
@UiThreadTest
public void testCompute() {
// given
boundBoxOfMainActivity = new BoundBoxOfMainActivity(getActivity());
// when
boundBoxOfMainActivity.boundBox_getButtonMain().performClick();
// then
assertEquals("42", boundBoxOfMainActivity.boundBox_getTextViewMain().getText());
}
答案 2 :(得分:1)
您发布了blog article about this topic并展示了如何通过了解java包和AndroidManifest“包”之间的区别来测试内部方法。
您将最终使用与传统Java相同的技巧:让待测方法受到保护。
我希望有所帮助!
答案 3 :(得分:1)
从测试框架测试私有方法的最佳和合法的合法方法是 @VisibleForTesting 对方法的注释,因此对于测试框架,同样的方法将像公共方法一样可见。 这是Official link for VisibleForTesting annotation
答案 4 :(得分:0)
@VisibleForTesting(否则= VisibleForTesting.PROTECTED) 私有字符串字段;
您可以在单元测试中使用“公共”和“受保护”字段或方法。