[转载]Android单元测试Junit (一) – 米蓝 – 博客园.
1、在eclips中建立一个Android工程,具体信息如下:
2、配置单元测试环境,打开AndroidManifest.xml,具体代码如下所示:
< span class = "com" > <!--?xml version="1.0" encoding="utf-8"?--> </ span >< span class = "pln" > </ span >< span class = "com" > <!--使用单元测试库--> </ span >< span class = "pln" > </ span >< span class = "com" > <!-- 声明Android框架和目标测试包--> </ span >< span class = "pln" > </ span > |
说明:
1、<uses-library android:name=”android.test.runner”/> 这句,放在application内部。
2、android:targetPackage 这个属性,一般为应用程序的包名,必须和xml中manifest节点的package同名。
3、创建一个包com.milan.service,这个包下面再创建一个类 Person,用于测试的时候调用。
<span class = "kwd" > package </span><span class = "pln" > com</span><span class = "pun" >.</span><span class = "pln" >milan</span><span class = "pun" >.</span><span class = "pln" >service</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > getAge</span><span class = "pun" >(</span><span class = "typ" >String</span><span class = "pln" > age</span><span class = "pun" >){</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Integer</span><span class = "pun" >(</span><span class = "pln" >age</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
4、在com.milan.junit包下面,建一个PersonTest类,代码如下:
<span class = "kwd" > package </span><span class = "pln" > com</span><span class = "pun" >.</span><span class = "pln" >milan</span><span class = "pun" >.</span><span class = "pln" >junit</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > com</span><span class = "pun" >.</span><span class = "pln" >milan</span><span class = "pun" >.</span><span class = "pln" >service</span><span class = "pun" >.</span><span class = "typ" >Person</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >test</span><span class = "pun" >.</span><span class = "typ" >AndroidTestCase</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >PersonTest</span><span class = "pln" > </span><span class = "kwd" > extends </span><span class = "pln" > </span><span class = "typ" >AndroidTestCase</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "com" > ///用例1,传入非数字</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > test01</span><span class = "pun" >(){</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > person </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > person</span><span class = "pun" >.</span><span class = "pln" >getAge</span><span class = "pun" >(</span><span class = "str" > "milan" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //用例2,传入数字</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > test02</span><span class = "pun" >(){</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > person </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > person</span><span class = "pun" >.</span><span class = "pln" >getAge</span><span class = "pun" >(</span><span class = "str" > "1" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
5、选中PersonTest.java,右键选择Run As 选择Android Junit Test 运行单元测试,如图:
从上图可以看到,test01的测试结果为失败。失败原因为:java.lang.NumberFormatException: Invalid int: “milan”,
test02的测试结果为通过。
如果没有Junit运行结果,可以在eclips的Window菜单下,选择Show View–Other–Java–Junit 中打开。
6、运行单个测试用例
eclips的Window菜单下,选择Show View–Other–General–Outline打开大纲视图,右键测试用例,即可运行单个测试用例。如图:
同理,如果需要执行整个项目的测试用例,可选中整个项目,用Android Junit Test运行即可。
7、断言
当我们获得程序的运行结果,我们希望Junit能够自动判断 将实际结果和期望结果是否一致。这个时候我们就可以用到Junit自带的断言。
修改PersonTest类,为以下代码:
<span class = "kwd" > package </span><span class = "pln" > com</span><span class = "pun" >.</span><span class = "pln" >milan</span><span class = "pun" >.</span><span class = "pln" >junit</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > com</span><span class = "pun" >.</span><span class = "pln" >milan</span><span class = "pun" >.</span><span class = "pln" >service</span><span class = "pun" >.</span><span class = "typ" >Person</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > import </span><span class = "pln" > android</span><span class = "pun" >.</span><span class = "pln" >test</span><span class = "pun" >.</span><span class = "typ" >AndroidTestCase</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >PersonTest</span><span class = "pln" > </span><span class = "kwd" > extends </span><span class = "pln" > </span><span class = "typ" >AndroidTestCase</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "com" > ///用例1,传入非数字</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > test01</span><span class = "pun" >(){</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > person </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > i</span><span class = "pun" >=</span><span class = "pln" > person</span><span class = "pun" >.</span><span class = "pln" >getAge</span><span class = "pun" >(</span><span class = "str" > "milan" </span><span class = "pun" >);</span><span class = "pln" > assertEquals</span><span class = "pun" >(</span><span class = "lit" > 1 </span><span class = "pun" >,</span><span class = "pln" > i</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //用例2,传入数字,断言有message</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > test02</span><span class = "pun" >(){</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > person </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > i</span><span class = "pun" >=</span><span class = "pln" > person</span><span class = "pun" >.</span><span class = "pln" >getAge</span><span class = "pun" >(</span><span class = "str" > "1" </span><span class = "pun" >);</span><span class = "pln" > assertEquals</span><span class = "pun" >(</span><span class = "str" > "传入数字" </span><span class = "pun" >,</span><span class = "lit" > 2 </span><span class = "pun" >,</span><span class = "pln" >i</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //用例2,传入数字,断言无message</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > test03</span><span class = "pun" >(){</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > person </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > i</span><span class = "pun" >=</span><span class = "pln" > person</span><span class = "pun" >.</span><span class = "pln" >getAge</span><span class = "pun" >(</span><span class = "str" > "1" </span><span class = "pun" >);</span><span class = "pln" > assertEquals</span><span class = "pun" >(</span><span class = "lit" > 1 </span><span class = "pun" >,</span><span class = "pln" >i</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
然后运行结果为:
如果传入了message,一旦用例不通过,会在右边的错误详细里,列出message。
8、其他断言
JUnit提供丰富的断言,来满足我们不同的比对需求。按住Ctrl键,点击代码中的assertEquals,可以看到Assert类里面多支持的断言函数的参数类型:
大家有空可以多试试。这里就不一一讲解了。
其他信息
如出现Test run failed:Unable to find instrumentation target package错误
是因为 android:targetPackage=“com.milan.junit” 必须和
<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
package=“com.milan.junit”
package相同的包名