2

SpringTest と EasyMock を使用して、Spring Bean の単体テストを行います。

私のテスト Bean は次のようなものです。

    @ContextConfiguration(locations = "classpath:/test/applicationContext-test.xml")
    public class ControllerTest {

        @Autowired
        private Controller controller;

        @Autowired
        private IService service;

        @Test
        public void test() {
        }
}

これが私のコントローラーです:

@Controller
@Scope("request")
public class Controller implements InitializingBean {

    @Autowired
    private IService service;

    void afterPropertiesSet() throws Exception {
        service.doSomething();
    }

}

afterPropertiesSet メソッドは、Spring が Bean を初期化するときに自動的に呼び出されます。doSomething メソッドの呼び出しを EasyMock でモックしたいと思います。

テストメソッドでこれを行うつもりですが、テストメソッドに入る前に afterPropertiesSet が実行されます。これは、Spring が Bean を初期化するときに呼び出すためです。

SpringTest または EasyMock を使用して afterPropertiesSet メソッドに存在するサービスをモックするにはどうすればよいですか?

ありがとう

編集:

モックされたサービスが Spring によってコントローラーに正しくロードされることを指定します。私の問題は、モックを作成する方法ではなく (もう大丈夫です)、メソッドをモックする方法です。

4

2 に答える 2

2

あなたは十分な詳細を提供していないので、Mockito の例を挙げます。IServiceこのモック構成をファイルの先頭に追加します。applicationContext-test.xml

<bean 
      id="iServiceMock"
      class="org.mockito.Mockito" 
      factory-method="mock"
      primary="true">
  <constructor-arg value="com.example.IService"/>
</bean>

primary="true"属性に気づきましたか?IServiceSpring は、インターフェイスを実装する 2 つのクラスを見つけるようになりました。ただし、そのうちの 1 つがプライマリであり、自動配線用に選択されます。それでおしまい!

行動を記録または検証したいですか?このモックをテストに挿入するだけです。

@ContextConfiguration(locations = "classpath:/test/applicationContext-test.xml")
public class ControllerTest {

  @Autowired
  private IService iServiceMock;
于 2012-08-31T16:48:23.037 に答える
1

@Autowire代わりに、テストでプログラムでインスタンス化し、模擬サービスを手動で設定します。

@Test
public void test() {
    Controller controller = new Controller();
    controller.setMyService(mockService);
}

また:

@Test
public void test() {
    Controller controller = new Controller();
    controller.afterPropertiesSet();
}
于 2012-08-31T17:46:21.600 に答える