2011-04-24 30 views
6

私はMockitoを初めて使用し、注入された依存関係に依存するクラスの単体テストを行う方法を理解しようとしています。私がしたいのは、依存関係のモックオブジェクトを作成して、私がテストしているクラスに、Springが注入する通常の注入依存関係の代わりにそれらを使用するようにすることです。私はチュートリアルを読んでいますが、これを行う方法についてちょっと混乱しています。私は、このようにテストしたいクラスを1持ってMockito、注入された依存関係に依存するオブジェクトのテスト(Spring)?

その後
package org.rd.server.beans; 

import org.springframework.beans.factory.annotation.Autowired; 

public class TestBean1 { 

    @Autowired 
    private SubBean1 subBean1; 

    private String helloString; 

    public String testReturn() { 

     subBean1.setSomething("its working"); 
     String something = subBean1.getSomething(); 
     helloString = "Hello...... " + something; 

     return helloString; 
    } 

私は以下のように、モックオブジェクト(というよりも、通常のSubBean1クラスとして使用するクラスがあります。

package org.rd.server.beans.mock; 

public class SubBean1Mock { 

    private String something; 

    public String getSomething() { 
     return something; 
    } 

    public void setSomething(String something) { 
     this.something = something; 
    } 


} 


    } 

私はちょうどこのような単純なテストを実行してみたい:

package test.rd.beans; 
import org.rd.server.beans.TestBean1; 

import junit.framework.*; 


public class TestBean1Test extends TestCase 
{ 
    private TestBean1 testBean1; 

    public TestBean1Test(String name) 
    { 
     super(name); 
    } 

    public void setUp() 
    { 
     testBean1 = new TestBean1(); 
     // Somehow inject the mock dependency SubBean1Mock ??? 

    } 

    public void test1() { 
     assertEquals(testBean1.testReturn(),"working"); 
    } 
} 

私はこれを行うにはかなり簡単な方法があるはずだと思っていますが、自分がやっていることすべてを理解するためのコンテキストがまだないので、チュートリアルを理解できないようです。もし誰かがこれにいくつかの光を当てることができれば、私はそれを感謝するだろう。

答えて

8

あなたはMockitoの静的モックメソッドを呼び出すことでモックを作成Mockitoを使用している場合。あなたはテストしようとしているクラスに模擬を渡すことができます。

testBean1 = new TestBean1(); 
SubBean1 subBeanMock = mock(SubBean1.class); 
testBean1.setSubBean(subBeanMock); 

あなたはその後、たとえば、あなたはMockitoの静的なときにメソッドをテストしようとしているものは何でものためにあなたのモックオブジェクトに適切な行動を追加することができます:

when(subBeanMock.getSomething()).thenReturn("its working"); 
5

Mockitoでは、新しい "模擬"実装を実際に作成するつもりはありませんが、むしろ、メソッドが呼び出されたときに何を返すべきかをMockitoに伝えることによって、注入された依存関係のインタフェース上のメソッドを模擬します。

私はMockitoを使ってSpring MVC Controllerのテストを書いて、ほかのJavaクラスと同じように扱いました。私が持っていた他のさまざまなSpring Beanを模擬して、SpringのReflectionTestUtilsを使ってそれらを注入して、Mockitoベースの値を渡すことができました。私は2月のブログに書きました。テストクラスのソースとコントローラのソースのほとんどがあるので、ここに内容を入れるのは時間がかかりそうです。

http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/

+0

あなたの設定方法は、次のようになりますありがとう、あなたの答えは、私は平易な英語の言葉でそれを理解するために多くの助け:)私は今正しい軌道にあると思う – Rick

+0

私はかなり嘲笑するのは新しいですが、できます。私はMockitoが本当に気に入っていて、とても親しみやすいと感じました。あなたのテストで幸運! – digitaljoel

+0

ありがとう、偉大な記事、私はそれが動作するようにいくつかの問題を抱えていたが、私はそれから私は間違って何かが間違っていたと確信していますが、私はエドの方法を働かせることができた。モックテストは間違いなく私がもっとやるべきことです – Rick

関連する問題