以下為本人在AndroidStudio 2.0 上實測后得出的結論,不像網上那一堆堆的誤人子弟的文章,都是過時的或者根本就是不對的。
簡介
和eclipse需要配置清單文件不同,AndroidStudio自帶的單元測試功能是不需要修改AndroidManifest.xml或gradle文件的,直接編寫測試用例即可。
使用AS新建一個工程時,在src目錄下會自動創建三個目錄:

mian目錄下為項目代碼,androidTest目錄下為編寫Android測試用例使用,test目錄下為編寫Java測試用例使用。
gradle文件默認也已配置
【testCompile 'junit:junit:4.12'】

Java測試用例
默認
test目錄下有一個現成的
ExampleUnitTest類,我們稍加修改
/**
* To work on unit tests, switch the Test Artifact in the Build Variants view.
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
int sum = 2 + 2;
System.out.println("結果為:" + sum);
assertEquals(4, sum);
}
}
打開測試用例類,切換到Structure面板,
鼠標選中要測的方法,右鍵–Run [方法名],即可進行Java用例測試。


如果運行結果正確,Run面板會是綠色的

否則是紅色的,比如我們將其中一行代碼修改為
assertEquals(5, 2 + 2);

我們也可以添加自己的測試類或測試方法,只不過我們的測試方法上要滿足以下條件
- 方法要為【public】訪問權限
- 要添加【@org.junit.Test】的注解
- 方法不能帶參數(因為你沒辦法傳遞參數啊)
Android測試用例
同樣,默認
androidTest
目錄下有一個現成的ApplicationTest
類
,我們稍加修改
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
//方法名必須以test開頭,並且方法不能帶參數
public void testSimple() {
int width = getScreenWidth(getContext());
Log.i("bqt", "屏幕寬:" + width);
Toast.makeText(getContext(), "屏幕寬:" + width, Toast.LENGTH_SHORT).show();
//assertEquals(4, 2 + 2);//可以沒有聲明語句
}
/**
* 獲取屏幕寬
*/
private int getScreenWidth(Context context) {
DisplayMetrics metric = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metric);
return metric.widthPixels;
}
}
運行后

並且可以生成與運行環境(即Context)有關的日志(這才是最重要的用途,我們可以在不運行APP的情況下獲取App所有數據)

不過,很遺憾,我們不能直接操作UI(吐司沒有彈出來)
我們的測試方法上要滿足以下條件
- 方法要為【public】訪問權限
- 所有的測試方法必須以test作為前綴(上面的Java測試用例是要求有@Test的注解)
- 方法不能帶參數(因為你沒辦法傳遞參數啊)
不過很奇怪的是,ApplicationTestCase類提示過時了,但是又沒提示用哪個替換……而且這是你自動幫我生成的呀……
