2016-04-07 3 views
0

私はCrudRepositoryを使用するコントローラのテストを書いています。通常、実際のリポジトリインスタンスの代わりにmockを使用して単体テストを分離したいと思います。しかし、Springは実際のリポジトリのプロキシを注入し続けますが、それらを効果的に排除する方法はわかりません。Springテストでリポジトリを除外するにはどうすればいいですか?

のような私のユニットテストを見て何か:

@SpringApplicationConfiguration(TestConfiguration) 
@WebAppConfiguration 
class ControllerSpec extends Specification { 
    ... 
} 

設定は次のようになります。

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
class TestConfiguration { 

    @Bean 
    AccountRepository accountRepository() { 
     mock(AccountRepository) 
    } 

} 

私は@NoRepositoryBeanと設定クラスに注釈を試みたが、それはうまくいきませんでした。私はComponentScanで正規表現を使ってexcludeFiltersを試してみましたが、動作しませんでした。

+0

@MockプライベートAccountRepository accountRepositoryを試してみたいかもしれません。クラスレベルで。 – asg

+0

コントローラクラスのAccountRepositoryにsetterメソッドを追加する方法はありますか?テストを実行する前に、repoをmockインスタンスとして設定してください。 –

答えて

0

@EnableAutoConfiguration注釈は、ユーザーがいくつかの自動設定機能を無視することができますexcludes性質を有しています。これらのほとんどは対応する*AutoConfigurationクラスで表されます。特にリポジトリをバイパスするには、次のように自動設定から除外することができます。

  • HibernateJpaAutoConfiguration
  • DataSourceAutoConfiguration
  • JpaRepositoriesAutoConfiguration

私は絶対的であるそれらのどの組み合わせで、本当にわからないんだけど試行錯誤を行うのは比較的簡単です。

0

コントローラの上部に@InjectMockアノテーションを、リポジトリに@Mockアノテーションを使用する必要があります。

@RunWith(MockitoJUnitRunner.class) 
public class AccountControllerTest { 

@InjectMocks 
AccountController controller; 

@Mock 
AccountRepository accountRepository; 
} 
+0

私はテストにJUnitを使用していません(少なくとも直接的ではありません)ので、ランナーは動作しません。 –

関連する問題