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
沒有留言:
張貼留言