2015-05-12 187 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