2016-05-31 34 views
3

ジャージーをRESTエンジンとして使用しています。 私は各要求を認証するためにジャージーフィルターを使用しています。 RUコントローラ(JUnitを使用)の単体テスト中にこれらのフィルタを無効にするか、モックフィルタを提供する適切な方法は何ですか?ここで単体テスト専用のジャージーフィルタを無効にする方法(スプリングブーツを使用)

は私が持っているものです。

  • 春ブートアプリケーション:

    @PropertySource("classpath:security-api.properties") 
    @SpringBootApplication 
    public class MyApplication { 
    
        public static void main(String[] args) { 
         SpringApplication.run(MyApplication.class, args); 
        } 
    } 
    
  • ジャージーコンフィギュレーションファイル:

    @Configuration 
    @ApplicationPath("/some/path") 
    public class MyJerseyConfiguration extends ResourceConfig { 
    
        public AnalyzerJerseyConfiguration() { 
         packages(BaseController.class.getPackage().getName()); 
         register(AuthorizationRequestFilter.class); 
         register(AuthorizationResponseFilter.class); 
        } 
    } 
    

答えて

3

おそらくあなたの最善の策を使用することですSpring Profiles 。あなたの投稿のResourceConfigを「実動」設定としてマークすることができます。テストの場合は、「テスト」プロフィールの新しいResourceConfigを作成します。次に、あなたのテストでちょうど"test"にアクティブなプロファイルを設定し、生産では、(上記のリンクで説明したように)また、あなたの財産の構成ファイルでアクティブなプロファイルを設定することができます"production"

@Profile("production") 
@Configuration 
@ApplicationPath("/some/path") 
public class MyJerseyConfiguration extends ResourceConfig { 

    public AnalyzerJerseyConfiguration() { 
     packages(BaseController.class.getPackage().getName()); 
     register(AuthorizationRequestFilter.class); 
     register(AuthorizationResponseFilter.class); 
    } 
} 

@Profile("test") 
@Configuration 
@ApplicationPath("/some/path") 
public class TestConfiguration extends ResourceConfig { 

    public AnalyzerJerseyConfiguration() { 
     packages(BaseController.class.getPackage().getName()); 
     register(TestRequestFilter.class); 
     register(TestResponseFilter.class); 
    } 
} 

@ActiveProfiles("test") 
@RunWith(SpringJUnit4ClassRunner.class) 
public class TestClass {} 

にアクティブなプロファイルを設定します。

異なるテストに異なる構成を使用する場合は、ResourceConfigサブクラスの束を作成するのではなく、異なるスプリング構成を作成する方が意味があります。さまざまな設定のために@Beanメソッドを作成することができます。

@Profile("test") 
@Configuration 
public class TestOneConfig { 
    @Bean 
    public ResourceConfig resourceConfig() { 
     return new ResourceConfig() 
      .register(Something.class); 
    } 
} 

@Profile("test") 
@Configuration 
public class TestTwoConfig { 
    @Bean 
    public ResourceConfig resourceConfig() { 
     return new ResourceConfig() 
      .register(DifferentSomething.class); 
    } 
} 

どちらを使用するかは、テスト設定に追加するだけです。 Spring Boot 1.4

@ActiveProfiles("test") 
@SpringApplicationConfiguration(classs={MainApp.class, TestOneConfig.class}) 
public class TheTest {} 

(まだリリースされていない)、彼らはResourceConfigCustomizerをご紹介します。これは、「テスト」ResourceConfigを作成することなく、あなたが

@Component 
public class TestCustomizer implements ResourceConfigCustomizer { 
    @Override 
    public void customize(ResourceConfig config) { 
     config.getClasses().remove(AuthorizationRequestFilter.class); 
     config.register(TestRequestFilter.class); 
    } 
} 

ような何かを行うと、テスト構成でこれを登録することができるかもしれない、それは少しきれいになるかもしれません。

+0

はい。どうもありがとうございました。確かに私はあなたが示唆したように(ほぼ)春のプロファイルを使用し、それは正常に動作しているように見えます。唯一の違いは、@ActiveProfilesアノテーションを使用しなかったのに対し、application.propertiesファイルの* spring.profiles.active *プロパティを代わりに使用したことです。どうもありがとうございました。男 –

関連する問題