2

モックオブジェクトを使用してこのクラスをテストするにはどうすればよいですか:

クラスマイクラス{

     MyStudent mystudent=null; 
     Mymethod mymethod= new Mymethod ();

     public void show(String data){ 
         mystudent=mymethod.display(data);

     }
  }

ここでmymethod.display()メソッドはのインスタンスを返しますmystudent

4

1 に答える 1

1

私があなたの質問を正しく理解していれば、些細な例でのモックを使用したjunitテストの例が必要です。Junit4 とmockitoを使用すると、junit テストは次のようになります。

TestTest.java

import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;

import org.junit.Before;


public class TestTest {
    private Test test;
    private Totest totest;

    @Before
    public void setup(){
        totest = mock(Totest.class);
        test = new Test(totest);
    }

    @org.junit.Test
    public void mytest_should_not_be_null_after_I_called_displayed(){
        when(totest.display(anyString())).thenReturn(new Mytest());
        test.myMethod("some data");
        assertNotNull(test.getMytest());
    }
}

setupメソッドには@Beforeアノテーションが付けられます。このテスト クラスのテスト ケースが実行される前に実行されます。テスト ケースには@Testアノテーションが付けられます。メソッドdisplayが呼び出された後、フィールドmytestが null でないことを確認するだけです。

そして、次のように Test クラスを改善する必要があります。

class Test{ 

     private Mytest mytest=null; 
     private final Totest totest;

     public Test(Totest totest) {
         this.totest = totest;
     }

     public void myMethod(String data){ 
         mytest = totest.display(data);
     }

    public Mytest getMytest() {
        return mytest;
    }

 }

Totest インスタンスをパラメーターとして受け取るコンストラクターに注意してください。このクラスの totest フィールドは final になります。それを設定できる唯一のコードはコンストラクターだからです。このようにして、Test クラスに Totest の任意のインスタンスを注入できます。これはある種の依存性注入です (依存性をクラスに注入する方法の例ですが、他にも方法があります。単純なセッターを使用することもできます。依存関係を final として宣言することを好みます。私の意見ではより明確です)。では、なぜあなたの些細な例で DI を使用したのでしょうか。Test 内に Totest のインスタンスを挿入する必要があったためです。単体テストで挿入するインスタンスは単なるモックです。テスト ケースの最初の行は、display が呼び出されたときのモック インスタンスの動作を定義します。

意味があることを願っています。

于 2012-09-10T09:42:53.313 に答える