Mockito library : https://code.google.com/p/mockito/w/list
Robolectric libary : https://github.com/thecodepath/android_guides/wiki/Robolectric-Installation-for-Unit-Testing
這兩個是支援寫test case的framwork,在這裡稍微描述如何安裝簡介
首先是安裝Robolectric
先下載 robolectric jar,
fest-util.jar,
fest-android.jar.
接著再想測試的project 裡建立一個 test folder 我的project 為 simpleApp
接著建立一個 Test 的 Java project 這邊必須非常注意,
是java project , 不是 android project , 也不是 android Junit project。
在這裡我創建了一個SimpleTest2 project
接著按下next,然後在src那邊按下右鍵,然後 remove from build path,
接著按下Link Additional Source
接著選取想要測試的 project 的 test folder (也就是剛剛創建的simpleApp的test folder)
接著點到project的 tag 將要測試的project 加入 也就是 simpleApp
接著將Robolectric的lib加入SimpleTest2 lib的folder
接著設定build path 如下圖
接著使用 add Jars 將lib folder內的 jars 加入
接著add library -> JUnit
使用Junit4
接著add external Jars android.jar and maps.jar
接著點選 run -> run configure
接著將test runner 改成 Junit4
接著切換到Argument Tag 然後選取 other radio button 然後點選 workspace ->
選取要測試的project SimpleApp
multiple launcher 那邊 ,選取select one 之後選取 Eclipse Junit Launcher
接著在simpleTest2裡創建一個myActivitytest.java
sample code 為
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
@Test
public void shouldHaveHappySmiles() throws Exception {
String hello = new MainActivity().getResources().getString(R.string.hello_world);
assertThat(hello, equalTo("Hello world!"));
}
}
接著使用 run as -> junit test 就會看到綠色條出現了
install Robolectric 就完成了
接著要安裝 mockito ,
mockito Download
我們可以再已經建構Robolectric上使用 mockito,方法很簡單
只需要將library依照剛剛加入library的方式加入就可以了 如下圖
接著我寫了一個class
public class NetworkData
{
private String name;
public String getName()
{
return name;
}
}
NetworkData 的資料必須在網路連接時才有辦法取得
所以我們必須使用Mock假裝資料回傳
package com.codepath.example.simpleapp.test;
import static org.junit.Assert.*;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import com.example.simpleapp.NetworkData;
import com.example.simpleapp.MainActivity;
import com.example.simpleapp.R;
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
@Test
public void shouldHaveHappySmiles() throws Exception {
String hello = new MainActivity().getResources().getString(R.string.hello_world);
assertThat(hello, equalTo("Hello world!"));
}
@Test
public void NetworkDataTest(){
//arrange
NetworkData i=mock(NetworkData.class);
when(i.getName()).thenReturn("Hello");
//act
String result=i.getName();
//assert
assertEquals("Hello", result);
}
}
在networkTest 裡 可以看到我mock了一個NetworkData,
然後在getName的時候會回傳Hello ,接著只要確認結果是否跟預期一樣
可以看到綠燈再度亮起。
經過了千辛萬苦的設定,終於就完成了Mockito 和 Robolectric的設定
可以開始寫測試囉~
更多Robolectric的參考資料
http://robolectric.org/customizing.html