AS 進行單元測試


以下為本人在AndroidStudio 2.0 上實測后得出的結論,不像網上那一堆堆的誤人子弟的文章,都是過時的或者根本就是不對的。

簡介

和eclipse需要配置清單文件不同,AndroidStudio自帶的單元測試功能是不需要修改AndroidManifest.xml或gradle文件的,直接編寫測試用例即可。
使用AS新建一個工程時,在src目錄下會自動創建三個目錄:

mian目錄下為項目代碼,androidTest目錄下為編寫Android測試用例使用,test目錄下為編寫Java測試用例使用。

gradle文件默認也已配置 【testCompile 'junit:junit:4.12'】


Java測試用例

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


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

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

我們也可以添加自己的測試類或測試方法,只不過我們的測試方法上要滿足以下條件
  • 方法要為【public】訪問權限
  • 要添加【@org.junit.Test】的注解
  • 方法不能帶參數(因為你沒辦法傳遞參數啊)

Android測試用例

同樣,默認 androidTest 目錄下有一個現成的ApplicationTest ,我們稍加修改
    
    
    
            
  1. /**
  2. * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
  3. */
  4. public class ApplicationTest extends ApplicationTestCase<Application> {
  5. public ApplicationTest() {
  6. super(Application.class);
  7. }
  8. //方法名必須以test開頭,並且方法不能帶參數
  9. public void testSimple() {
  10. int width = getScreenWidth(getContext());
  11. Log.i("bqt", "屏幕寬:" + width);
  12. Toast.makeText(getContext(), "屏幕寬:" + width, Toast.LENGTH_SHORT).show();
  13. //assertEquals(4, 2 + 2);//可以沒有聲明語句
  14. }
  15. /**
  16. * 獲取屏幕寬
  17. */
  18. private int getScreenWidth(Context context) {
  19. DisplayMetrics metric = new DisplayMetrics();
  20. ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metric);
  21. return metric.widthPixels;
  22. }
  23. }
運行后

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

不過,很遺憾,我們不能直接操作UI(吐司沒有彈出來)

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






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM