2015-05-12 118 views
0

我剛開始單元測試的AndroidAndroid的單元測試與JUnit框架

放在了src我的測試文件夾,以便路徑是像/ src目錄/ TEST。

My/src/main/java/com/example/prabhu/mathapplication由我的活動和java類組成。

我只是想運行一個測試來檢查一個方法得到執行或它不,但我無法解決這個錯誤,這是我的理解是由於沒有找到鏈接。所以,當寫測試我怎麼做解決這個問題,以及如何使用mock。

我的測試代碼是:

/** 
* Created by prabhu on 12/05/15. 
*/ 

    import com.example.prabhu.mathapplication.CalcNative; 
    import com.example.prabhu.mathapplication.MainActivity; 

    import junit.framework.TestCase; 

    import org.junit.After; 
    import org.junit.Before; 
    import org.junit.*; 

public class MyAdderTest extends TestCase { 
    private MainActivity mMyAdder; 
    // private CalcNative do_calculation_in_native; 

    int x,y; 

    @Before 
    public void setUp() throws Exception { 
     // Code that you wish to run before each test 
     mMyAdder = new MainActivity(); 
     // do_calculation_in_native = new CalcNative(); 
     x=2; 
     y=3; 

    } 

    @After 
    public void tearDown() throws Exception { 
     // Code that you wish to run after each test 
    } 

    @Test 
    public void testAdd() { 
     mMyAdder.iterate_java(9999,9999,9999); 
     // boolean x = do_calculation_in_native.perform_calculations(1234,1234,1234); 
     int z = x+y; 
     assertEquals(z,5); 
     // assertEquals(true,x); 
    } 

} 

如果我註釋掉包含類和測試用例的工作線我沒有得到任何錯誤...

的錯誤是:

java.lang.UnsatisfiedLinkError: no CalcNative in java.library.path 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 
at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
at java.lang.System.loadLibrary(System.java:1119) 
at com.example.prabhu.mathapplication.MainActivity.<clinit>(MainActivity.java:118) 
at MyAdderTest.setUp(MyAdderTest.java:22) 
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 

我的項目結構如下:

enter image description here

的MainActivity.java如下:

package com.example.prabhu.mathapplication; 

import android.app.ActivityManager; 
import android.content.Intent; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RadioButton; 
import android.widget.TextView; 


public class MainActivity extends ActionBarActivity { 

    RadioButton jni_radio,java_radio; 
    EditText number1,number2,iterate; 
    int input_number1,input_number_2,iterator,increment; 
    Boolean check_operations; 
    TextView add_number,diff_between,product_of,divided_by; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     jni_radio = (RadioButton)findViewById(R.id.radioButton); 
     java_radio = (RadioButton)findViewById(R.id.radioButton2); 

       number1 =(EditText)findViewById(R.id.editText); 
       number2 = (EditText)findViewById(R.id.editText2); 
       iterate = (EditText)findViewById(R.id.editText3); 

       try 
       { 
        input_number1 = Integer.parseInt(number1.getText()+""); 
        input_number_2 = Integer.parseInt(number2.getText()+""); 
        iterator = Integer.parseInt(iterate.getText()+""); 
       }catch (Exception e) 
       { 

       } 


       if(java_radio.isChecked()) 
       { 
        iterate_java(input_number1,input_number_2,iterator); 
       } 
       else if(jni_radio.isChecked()) 
       { 
        check_operations = (Boolean) CalcNative.perform_calculations(input_number1,input_number_2,iterator); 
       } 
    } 


    public static void iterate_java(int input_number1,int input_number_2,int iterator) 
    { 
     for(int increment = 0;increment<iterator;increment++) 
     { 
      int l = input_number1+input_number_2; 
      int j = input_number1-input_number_2; 
      int k = (input_number1*input_number_2); 
      int i = input_number1/input_number_2; 
     } 
    } 

    static 
    { 
     System.loadLibrary("CalcNative"); 
    } 
+0

粘貼此com.example.prabhu.mathapplication.MainActivity。行號爲 – KOTIOS

+0

@ N5。我已經添加了MainActivity –

回答

2

修改你的代碼象下面這樣:

try { 
     System.loadLibrary("CalcNative");   
    } catch (UnsatisfiedLinkError e) { 
     // TODO: handle exception 
    } 

說明:測試框架尚不支持LOADLIB 功能,因此喜歡的API jni等將不適用於android測試 框架。上面的try-catch塊無論如何都不會傷害我們的代碼,它會在您運行測試用例時退出 。

+0

這爲我工作謝謝你!!!!!! –

+0

你可以幫助我如何使用模擬android –

+1

創建模擬爲哪些類或apis? – KOTIOS