2016-05-24 15 views
0

私はテストケースを行っていますが、私は今この関数をテストする方法はありません。あなたは私にいくつかのアイデアを教えていただけますか?私はMockitoを使用しようとしていたが、私はヌルになる。私はあなたの助けに感謝します。Androidテスト - どのようにこの機能をテストできますか?

これはテストしたい機能です。

public static Date optDate(JSONObject json, String key) { 
    if(!json.isNull(key)) { 
     try { 
      DateTime dt = JSONUtils.dateFormatter.withZoneUTC().parseDateTime(json.optString(key)); 
      Date date = dt.toDate(); 
      return date; 
     } catch(Exception e) { 
     } 
    } 
    return null; 
} 

そして、私はこのようにテストしています。

@RunWith(MockitoJUnitRunner.class) 
public class JSONUtilsTest { 
    static String dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; 
    static DateTimeFormatter dateFormatter = DateTimeFormat.forPattern(dateFormat); 
    DateTime dt = JSONUtilsTest.dateFormatter.withZoneUTC().parseDateTime("2011-11-02T02:50:12.208Z"); 
    Date date = dt.toDate(); 

    @Mock 
    JSONObject JSONMock = Mockito.mock(JSONObject.class); 
    JSONUtils mJSONUtils = Mockito.mock(JSONUtils.class); 


    @Before 
    public void setup() { 
     doReturn(date).when(mJSONUtils).optDate(JSONMock,"possessionDate"); 
    } 


    @Test 
    public void optDateShouldReturnValueOnValidString() { 
      Date result = JSONUtils.optDate(JSONMock, "possessionDate"); 
      Assert.assertEquals("2011-11-02",result); 

    } 


} 

***************************** EDIT 1 ************ ************************

このメソッドをテストする正しい方法を見つけようとした後。これは私がしました。

@RunWith(MockitoJUnitRunner.class) 
public class JSONUtilsTest { 

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
    Date today = new Date(); 
    String todayString = dateFormat.format(today); 

    @Mock 
    JSONObject JSONMock = Mockito.mock(JSONObject.class); 

    @Before 
    public void setup() { 
     when(JSONUtils.optString(JSONMock, "possessionDate")).thenReturn(todayString); 

    } 

    @Test 
    public void optDateShouldReturnValueOnValidString() { 
     Date result = JSONUtils.optDate(JSONMock, "possessionDate"); 
     Assert.assertEquals(today,result); 
    } 
+0

私が間違っていない限り、ここで制御する必要があるのは 'json'オブジェクトだけです。意味:あなたが 'isNull()'と 'optString()'の2つのメソッド呼び出しが、テスト中のメソッドに提供するオブジェクトに対して呼び出されたかどうかを調べることができます。 – GhostCat

+0

@Jägermeisterどのようにすることができますか?そのメソッドが正しい値を返しているかどうかをテストしようとしていました。このようにして 'opString()'をテストしてみましょう:@Before public void setup(){ when(JSONUtils.optString(JSONMock、 "name"))。thenReturn( "Daniel"); when(JSONUtils.optString(JSONMock、 "city"))。then返される(null); when(JSONUtils.optString(JSONMock、 "lastname"))。then return( ""); } @Test公共ボイドoptStringShouldReturnValidStringOnName(){ 文字列結果= JSONUtils.optString(JSONMock、 "名")。 Assert.assertEquals( "Daniel"、result); } –

+0

2つの呼び出しを必要とし、返したいものを返すモックを作成しますか?あなたのセットアップ方法のように? – GhostCat

答えて

0

モックベースのテストは、常にこのように動作します:

  1. あなたが期待コール用モックを「指示」とは、あるクラスのモックオブジェクト
  2. のいくつかの並べ替えを作成し、潜在的な戻り値を指定します
  3. "テスト中のコード"をトリガーします。その模擬オブジェクトをテスト中のコードへの「入力」として使用する
  4. "テスト中のコード"が予想される出力を生成することを確認します。モックフレームワークによっては、モックオブジェクトが指定された呼び出しを見たことを確認します。
+0

ありがとうございます。私はそれを作成する方法を知っていますが、私はそれをどのように使用するのか分かりません。初めてのテスト。私はたくさんのことを読んでいますが、私の持っているものとは異なる例があります。私は自分の質問を編集しました。それを確認してください。私はあなたが言ったことを行うメソッドをテストしようとします。私がそれをうまく行ったかどうかは分かりません。 –

関連する問題