2017-05-29 12 views
0

を使用して、私は私がテストしたい方法があります:私はテストケースは、計算をチェックすることですので、私はテストとして考えた何方法の応答を上書きするMockitoを使用して渡されたパラメータ

Public String doSomething (MyActivity activity , int number) { 

// do some stuff/math calculations 
     float aX = number/3450; 
     float bX = aX/2; 
     float cX = bX * 6; 

    return activity.getString(R.string.NameOfProduct, cX) 
} 

をその次の方法:

@Test 
    public void validDoSomething() throws Exception { 

    myObject = Mockito.spy(MyActivity.class); 
    ArgumentCaptor<Integer> captor=ArgumentCaptor.forClass(Integer.class); 
    MyActivity activity = Mockito.mock(MyActivity.class); 
    when(activity.getString(anyInt(),captor.capture())).thenReturn(new Answer<String>() { 
      @Override 
      public String answer(InvocationOnMock invocation) { 
        return (String) invocation.getArguments()[0]; 
      } 
     }.toString()); 

    int x = 9; 
    String test = myObject.validDoSomething (activity, x) 

    float aX = x/3450; 
    float bX = aX/2; 
    float cX = bX * 6; 
assertEquals(test ,cX) 
    } 

activity.getString()がダウンし、Androidのコンテキストを使用していますので、上のように私はちょうど計算されたパラメータを返すと私は私の(同じ)の計算に対して検証しますについて考えているので。私はそれを上書きします。

事は、私がテスト/クラスの名前...ではなく間違っている私は何を

  1. を渡された実際のパラメータを持つオブジェクトを取得しています応答しているのですか?実際の対応をどうやって得ることができますか?
  2. それは正しい方法でテストできますか?
+0

答えが正解です。また、インタフェースの後ろでactivity.getStringを移動することもできます。インタフェース(StringFetcherなど)にはgetProductStringメソッドがあります。 mockitoを使用すると、インタフェースの復帰を模擬することができます。 – Smashing

答えて

3

シンプルな関数をテストするのが非常に難しい理由は、ビジネスロジックとUIロジックを同じ場所に混在させるためです。計算を行うロジックを別の関数に移動して、関数内の関数の戻り値を使用することをお勧めします。そうすれば、ビジネスロジックはUIロジックから独立しており、簡単にテストできます。あなたの活動で

public float doSomething (int number) { 
    float aX = number/3450; 
    float bX = aX/2; 
    float cX = bX * 6; 
    return cx; 
} 

:@Ezioで与えactivity.getString(R.string.NameOfProduct, doSomething(number))

+3

その "ミキシング"と呼ばれる:**違反**単一の責任の原則;-) – GhostCat

+0

はいサー、あなたは正しい – Ezio

+0

@エジオどのようにどのように返されたパラメータを処理する方法やテストの他の方法? – RonTr

関連する問題