2016-05-31 6 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); 
    } 
} 

어느 것이 든 사용하려는 테스트 구성에 추가하십시오.

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

(아직 발표되지 않음)

는, 그들은 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 * 속성을 사용한다는 것입니다. 고맙습니다. 사람 –

관련 문제