Android单元测试

一、单元测试 - TestCase

 
继承AndroidTestCase类或者TestCase类,即可进行基本的单元测试。
AndroidTestCase类是TestCase的子类,其中添加了Context的相关操作。

 

配置测试环境

首先,在src目录下创建test目录,test目录下创建java目录,如下图所示。
 

其次,在build.gradle配置文件中添加如下配置:
android {
   testOptions {     
        unitTests.returnDefaultValues = true 
    }
 }
注意:该文件中添加此配置就可以了,不需要添加对junit包的依赖支持,因为android sdk中
已经自带了junit的内容,这里再配置运行时反而会出错(java.lang.NoClassDefFoundError: junit/textui/ResultPrinter)。
 
最后,在你需要创建测试类的类名上进行如下操作:
鼠标右击 -> Go To -> Test -> Create New Test ->弹出面板点击OK(如下图所示) ,
 
 

然后便可在test/java目录下看到创建的包路径以及测试类。

当然,也可以手动在test/java目录下创建包路径以及测试类。

 

编写代码测试运行

 

编写测试代码如下:
public class LoginActivityTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
}
public void testAdd() {
assertTrue(3 + 3 == 6);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
}
setUp方法在所有测试方法前执行,tearDown在所有测试方法后执行。
testAdd方法是自己写的测试方法,在testAdd方法上鼠标右击 - > Run 'testAdd()' 即可运行测试方法。
测试方法必须以test打头或者用@Test标注。

 

二、单元测试 - Robolectric

 

Robolectric是一款Android单元测试框架,它支持在单元测试(JVM)中运行测试Android API,即本该依赖于Android设备或模拟器
才能运行的程序,Robolectric使之可以直接在JVM中运行。

 

测试环境配置

 

测试环境配置基本跟上述的TestCase一样,只是需要在build.gradle文件里添加对Robolectric包的支持:
testCompile 'org.robolectric:robolectric:3.0'
另外,build.gradle文件里的testOptions配置可以省略。
为了方便测试,可以再导入一个断言包:
testCompile 'com.squareup.assertj:assertj-android:1.1.0'
PS:testCompile 是对src/test包的支持,测试用例运行于JVM,即不依赖Android设备或模拟器;
        androidTestCompile是对src/androidTest包的支持,测试用例运行于Android设备或模拟器。

 

编写代码测试运行

 

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class MyLcActivityTest {
private MainActivity mActivity;
@Before
public void setup() {
mActivity = Robolectric.buildActivity(MainActivity.class).create().get();
}
@Test
public void hasText() {
assertThat(mActivity.cb_possessions).hasText("资产");
}
}
同样,鼠标右击 -> Run即可运行。
 

问题及解决方案

 

在Robolectric里有个问题需要注意,如果是项目下的Module运行可能跑不起来,会报配置文件找不到的错误,原因是
RobolectricGradleTestRunner类的BUILD_OUTPUT变量设置的路径是工程根目录的build目录。
private static final String BUILD_OUTPUT = "build/intermediates";
解决办法是新建个类继承RobolectricTestRunner,代码完全复制RobolectricGradleTestRunner类,在新类里把模块名加入BUILD_OUTPUT变量即可,
例如BUILD_OUTPUT=“module_name/build/intermediates”;
然后在@RunWith()里引用新类就可以了。
 
 
注: 以上配置及测试于Android Studio 1.4版本上完成。

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值