Android之单元测试

来源:互联网 发布:著名网络小说家排行榜 编辑:程序博客网 时间:2024/05/22 11:35

本文地址:http://blog.csdn.net/qq_16628781/article/details/61202111

知识点:

1、单元测试;


常见测试方法有以下几个:

黑盒测试: 是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。

白盒测试: 又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。

单元测试: 又称模块测试,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。

功能测试: 根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。

压力测试: 主体向被观察者布置一定量任务和作业,借以观察个体完成任务的行为。

集成测试: 是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口

备注:黑盒测试,不看代码结构,从用户的角度测试功能,例如玩某一款游戏来测试。白盒测试:通过代码测试功能。


来说说Android中的单元测试,在建立项目的时候,IDE默认给我们建立了两个测试的文件,一个是可以在IDE里头直接测试的,另外一个是可以要运行在Android手机上面的。如下图所示


其中AndroidTest是需要在Android手机上运行才能跑的。

而test则是可以运行在IDE中的。

下面我们来看看这两个文件

首先是ExampleInsrumentedTest类

/** * Instrumentation test, which will execute on an Android device. * 运行在Android设备上的单元测试 * * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> */@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest {    @Test    public void useAppContext() throws Exception {        // Context of the app under test.        Context appContext = InstrumentationRegistry.getTargetContext();        assertEquals("com.yaojt", appContext.getPackageName());    }    @Test    public void addTest() {        HomeActivity homeActivity = new HomeActivity();        int count = homeActivity.add(1, 2);        System.out.println("count on dvice: " + count);    }}

ExampleUnitTest类:

/** * Example local unit test, which will execute on the development machine (host). * 运行在开发机器上的本地单元测试 * * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> */public class ExampleUnitTest {    @Test    public void addition_isCorrect() throws Exception {        assertEquals(4, 2 + 2);    }    //@Test是修饰符,必须的    @Test    public void addTest() {        HomeActivity homeActivity = new HomeActivity();        int count = homeActivity.add(1, 2);        System.out.println("count: " + count);    }}


我们运行IDE里头可以跑得单元测试,效果如图所示:



这里有一个小小的错误,就是当我引用我自己写的log类的时候,会出现这个问题:

java.lang.RuntimeException: Method i in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.at android.util.Log.i(Log.java)at com.yaojt.utils.LogUtil.logInfo(LogUtil.java:21)at com.yaojt.ExampleUnitTest.addTest(ExampleUnitTest.java:27)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:497)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:497)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


因为我使用了

LogUtil.logInfo("count");//自定义方法

我看了下,大概是说,这里不允许使用Android里头的类,因为本地单元测试使用的是Java。






0 0
原创粉丝点击