一般在开发Android app的时候常常会写一些小函数并验证它是否运行正确,一般作法咱们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程跑一下app,经过打log的方式来验证。不过,如今咱们活用Android Studio自带的单元测试功能便可免除这种麻烦,直接写测试用例像Junit那样来验证你的小函数html
在Android Studio中进行单元测试并不须要什么插件或者过多的配置,Android Studio自己就集成了测试环境,不管是单纯的java代码单元测试仍是依赖Android SDK的Android代码单元测试,都能驾轻就熟。
首先在你的gradle中加入Junit的依赖,注意这里的依赖方式是测试期间的依赖(testCompile):java
dependencies { testCompile 'junit:junit:4.12' }
再在项目的app/src下面和main文件夹同级的创建androidTest和test目录,而且分别在各自目录下建议java/com/xxx/xxx相似的和主工程一致的包名目录,创建好后,你的项目在Android Studio的Project中应该是这样的:
android
若是所写的测试代码没有使用android sdk(android.***下的代码),那么能够在test目录下新建,本例中即为ExampleUnitTest,例子中测试了一个RxJava的Observable的发射后被消费的结果。
注意测试用例即一个public void的方法,而且加上@Test注解,这是Junit的标准用法git
package com.jason.rxjavademo; import org.junit.Test; import rx.Observer; import rx.subjects.PublishSubject; public class ExampleUnitTest { @Test public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { System.out.println("Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
这时候打开Android Studio左边的Structure的面板,能够看到测试用例方法testPublishSubject
github
右击并运行它,测试经过,返回了正确的值
android-studio
注意本测试用例试用了System.out.println因此测试结果直接打印在了控制台上,若是把打印的地方换成Log.d()呢,你会发现报错:
app
这个实际是由于你在java的Unit test中引用了Android的代码,即android.util.log.Log。因此对于测试Android代码,须要在androidTest中ide
Android测试用例咱们能够函数
public class TestSubject extends InstrumentationTestCase { private static final String LOG_TAG = "test"; public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { Log.d(LOG_TAG, "Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.d(LOG_TAG, "Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
本例运行后,会在Android Monitor中以test这个LOGTAG打出和上一节同样的Log单元测试
Android Studio也提供了测试单个Activity或者多个Activities的测试用例方法基类,好比ActivityInstrumentationTestCase2,步骤为
public class TestActivity extends ActivityInstrumentationTestCase2<MainActivity> { private Context ctx; public TestActivity() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); ctx = getActivity().getApplicationContext(); } public void testStart() { Intent intent = new Intent(ctx, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(intent); } }
运行这个测试用例,你会发现模拟器上单独启动了这个Activity
除了InstrumentationTestCase和ActivityInstrumentationTestCase2外,android.test还提供了不少别的测试基类,好比
github site for this blog
https://github.com/soaringEveryday/BlogRoad/blob/master/Android%20Studio%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%85%A5%E9%97%A8.md
转载请注明 http://www.cnblogs.com/soaringEveryday/p/5461970.html