单元测试
单元测试其实是为了方便我们队代码正确性的检验,无论从事何种开发,在你写代码的过程中都是写一段验证一段,但是做Android开发的时候大多时候都是直接运行一次程序,然后一步一步点击到你需要测试的地方,其实Android studio给我们提供有单元测试的功能。不管是java代码还是Android中的某个activity 都可以测试。其中androidTest中的测试类是用于测试与某个activity界面里面的流程的,Test中的测试类是用于测试你的java代码的逻辑是否正确的。
下面我们分别做个测试:
我们先测试一段java代码:
package com.example.chenzhu.myprojectblog; import org.junit.Test; /** * 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 {int a =10;int b=20; System.out.println("TestActivity.....a+b="+(a+b));}}
我们先做个简单的打印,直接运行测试类后上log图:
下面 我们在来测试我们的一个Activity:
我们需要测试的activity代码:
package com.example.chenzhu.myprojectblog; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MyHandleActivity extends AppCompatActivity { Handler handler = new Handler(){ //接受消息并且处理消息 @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==1) { Log.d("TestActivity","handler........come...msg.what===1"); Toast.makeText(MyHandleActivity.this, "耗时操作开始" + msg.what, Toast.LENGTH_SHORT).show(); }else { Log.d("TestActivity","handler........come...msg.what===2"); Toast.makeText(MyHandleActivity.this, "耗时操作结束可以更新UI" + msg.what, Toast.LENGTH_SHORT).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_handle); Log.d("TestActivity","onCreate.......MyHandleActivity"); Message msg = new Message();//建立一个消息 msg.what=1; handler.sendMessage(msg);//发送一个消息 new MyTheard().start(); } @Override protected void onDestroy() { super.onDestroy(); Log.d("TestActivity","onDestroy.......MyHandleActivity"); } //模拟耗时操作 class MyTheard extends Thread{ @Override public void run() { super.run(); try { sleep(5); //模拟耗时操作结束 发送消息 Message msg = new Message(); msg.what=2; handler.sendMessage(msg); } catch (InterruptedException e) { e.printStackTrace(); } } } }
这里写我们测试类里面的代码注意是在AndroidTest里面:
package com.example.chenzhu.myprojectblog; import android.content.Context; import android.content.Intent; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import android.util.Log; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; /** * Instrumentation test, which will execute on an Android device. * * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { private Context appContext; @Test public void useAppContext() throws Exception { // Context of the app under test. appContext = InstrumentationRegistry.getTargetContext(); assertEquals("com.example.chenzhu.myprojectblog", appContext.getPackageName()); startest(); } public void startest(){ Intent intent = new Intent(appContext,MyHandleActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); appContext.startActivity(intent); Log.d("TestActivity ","start....."); } }
同样直接运行测试类后,看看我们的log打印:
总结下:我们在开发过程中会遇到一些需要测试的代码和逻辑,这样的话我们就可以用我们工具自带的测试类,简单又方便,这里给大家做个分享,希望大家喜欢。
需要注意的是有些Android studio中没有依赖 我们需要加上
androidTestCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'
但是现在的Android studio应该都会自带有。