【发布时间】:2012-01-12 11:09:29
【问题描述】:
我们可以使用 Android Mock 对 Android 应用程序的私有函数和字段进行单元测试吗?
如果是,请说明如何?
【问题讨论】:
标签: android unit-testing easymock
我们可以使用 Android Mock 对 Android 应用程序的私有函数和字段进行单元测试吗?
如果是,请说明如何?
【问题讨论】:
标签: android unit-testing easymock
对私有方法进行单元测试,对我来说听起来有点不对。公共和受保护的方法是单元测试的候选者。只是为了测试私有方法,您可以将方法设为公开或创建更多调用私有方法的公共方法的测试,并测试私有方法的核心功能。
【讨论】:
您好,发布了 blog article about this topic,并展示了如何通过了解 java 包和 AndroidManifest“包”之间的区别来测试内部方法。
您最终将使用与我们在 Java 中传统使用的技巧相同的技巧:让要测试的方法受到保护。
希望对你有帮助!
【讨论】:
一年后,我还推送了一个库来帮助测试私有方法和字段。我相信在 Android 上仍然需要测试私有方法。
你想让你的活动方法私有,以防止其他类认为他们可以访问它(片段可以,但这对我来说是错误的做法,最好使用可观察观察者模式)。然后,您将得到仅需要通过测试访问的私有字段和方法。
BoundBox 正是这样做的!下面是一个测试示例,它访问一个活动的 2 个私有字段来测试它:
@UiThreadTest
public void testCompute() {
// given
boundBoxOfMainActivity = new BoundBoxOfMainActivity(getActivity());
// when
boundBoxOfMainActivity.boundBox_getButtonMain().performClick();
// then
assertEquals("42", boundBoxOfMainActivity.boundBox_getTextViewMain().getText());
}
【讨论】:
从测试框架测试私有方法的最佳和适当的合法方法是 @VisibleForTesting 注释在方法上,因此相同的方法对于测试框架将是可见的,就像公共方法一样。 这里是Official link for VisibleForTesting annotation
【讨论】:
@VisibleForTesting(否则 = VisibleForTesting.PROTECTED) 私有字符串字段;
您可以在单元测试中使用公共和受保护的字段或方法。
【讨论】: