我对Android API有疑问。 Android API提供了一个名为“Instrumentation”的类。这门课有什么用? Instrumentation类是否仅与Junit一起用于单元测试。
Junit框架可用于测试Android API的方法,而无需使用Instrumentation类。
由于Junit软件包已包含在Android软件包中,我希望我们不需要单独使用install进行单元测试。
如果您能向我提供信息,我将不胜感激,因为我无法在网络上的任何地方找到这些明确的信息。
如果我们使用Junit测试框架来测试Android API,我们是否可以使用UI格式而不是测试格式来测试结果。?
非常感谢。欣赏你的时间。
此致 Riyas
答案 0 :(得分:4)
Instrumentation类允许测试用例订阅各种应用程序事件(按键等),并以编程方式控制UI以启用应用程序的功能测试。
因此,如果您所做的只是单元测试,而不是UI的功能测试,那么从技术上讲,您不需要Instrumentation类进行Junit测试。 可以只是扩展TestCase,但不提供任何Instrumentation支持。
这是link,其中包含对各种测试类的一些相当好的描述。
Junit包含在Android中,无需单独安装。
答案 1 :(得分:0)
Instrumentation API主要用于向UI注入各种事件,以便对应用程序进行压力测试。您可以创建一个任意事件,例如点击屏幕并使用instrumentation API注入它,这基本上就像伪事件生成。
答案 2 :(得分:0)
Instrumentation 类是测试框架的基类,它提供了非常具体的功能,它还提供 API 以通过 ADB 使用 ActivityManager 接口调用设备/模拟器上的测试。此外,它还可以将结果返回给开发机器。
通过覆盖这个类,您可以享受运行测试所需的所有上下文和帮助类。
下面是一个示例实现,我写信是为了向您解释功能。
public class SampleInstrumentation extends Instrumentation {
@Override
public void onCreate(Bundle arguments) {
super.onCreate(arguments);
Bundle bundle = new Bundle();
bundle.putString("whatisthis","thisiswhat");
finish(0,bundle);
}
}
清单:
...
...
</application>
<instrumentation
android:name=".SampleInstrumentation"
android:targetPackage="com.commons"></instrumentation>
</manifest>
现在,如果您从开发机器运行此命令。
adb shell am instrument -w -m com.commons/com.commons.SampleInstrumentation
您的检测类 onCreate 方法被调用,您将在控制台上获得一些二进制编码的响应,其中包含您传递给“完成”函数的包中的数据。
"
whatisthis
thisiswhat
我希望这能让您了解特定于该基类的功能。出于某种动机,我想补充一点,新的 android 测试框架 androidx.test
与我们的应用程序一起编译(不是操作系统的一部分,可以修改)直接扩展了 Instrumentation 类(Android 框架/操作系统的一部分)执行)。因此,您只需使用此类即可编写自己的全新测试框架实现。