2017-02-16 15 views
1

현재 우리는 Spring MVC에서 Togglz 라이브러리를 구현하려고하고 있습니다. 우리의 실제 수업에서Toggle을 한 곳에서 제어

import org.togglz.core.Feature; 
import org.togglz.core.annotation.EnabledByDefault; 
import org.togglz.core.annotation.Label; 
import org.togglz.core.context.FeatureContext; 

public enum MyFeatures implements Feature { 

    @Label("A Feature") 
    MY_FEATURE; 

    public boolean isActive() { 
    return FeatureContext.getFeatureManager().isActive(this); 
    } 
} 

다음 :

우리는 현재 다음과 같은 방법으로 우리의 MyFeatures.java 파일에서 우리의 코드에서 토글을 관리

if (MyFeatures.MY_FEATURE.isActive()) { 
    // some code... 
} 

이 잘 작동하지만 우리는이 우리가 다음을 수행하는 우리의 테스트의 결핍 :

@Rule 
public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class); 

// some tests, then: 

    if (MyFeatures.MY_FEATURE.isActive()) { 
     // some feature dependent test... 
    } 

여기서 문제는 MyFeature.java의 토글이 기본적으로 사용 중지되고 Google UI 또는이 MyFeatures.java 파일에서 사용/사용 중지로 전환된다는 것입니다. 활성화 라인 중 하나와 함께 온/오프 전환에하지만 ... 테스트에서 우리의 토글은이 기본값 : 각 테스트에서

@Rule 
    public TogglzRule togglzRule = TogglzRule.allDisabled(MyFeatures.class); 

또는 개별적으로합니다.

이것은 우리가 내 질문은, 그래서 우리는 이러한 기능을 사용하여 더 많은 테스트가 있다면, 어쩌면 더 많은 우리의 기능을 전환 할 필요가 적어도 두 곳이다

가의 모든 Togglz 기능 토글을 제어하는 ​​것이 가능 코드 또는 테스트에 관계없이 단일 장소?

답변

1

여기서의 문제는 MyFeature.java의 토글이 기본적으로 사용 중지되어 있으며 UI 또는 MyFeatures.java 파일에서 토글을 켜고 끄는 것입니다.

이 파일이나 UI에서 기능 상태를 변경하면 프로덕션 환경 (따라서 가능한 사용자)의 응용 프로그램 동작에 영향을줍니다.

하지만 ...

은 테스트에서 우리의 토글은이 기본값을 사용하고 어느 선으로 온/오프 전환 :

시험이 시험에서 응용 프로그램의 동작에 영향을의 기능 상태를 변경.

이것은, 그것을 우리가 그 기능

수 등이 존재한다면 있기 때문에 당신이 요구하는 것은 논쟁의 여지를 사용하여 더 많은 테스트가 있다면 우리는 우리의 기능을 전환 할 수 어쩌면이 적어도 두 곳이다 테스트 및 생산 환경 모두에 영향을 미칩니다. 이 사실은 이어질 것 다음 일부 기능을 해제 할 때

  • 는, 당신은이 기능을 사용하도록 설정하는가이 기능에 의존하고 있기 때문에, 실패 시작하고 그것을
  • 을 테스트하기 위해 시도 된 테스트 테스트가 끝났지 만 아직 사용자가 아직 준비되지 않은 기능을 볼 수있는 기회가 있습니다.

이 분리는 목적을 위해 존재하며 2 개의 다른 장소에서 기능 상태를 관리하는 것은 실제로 기능이 아니라 버그.

대부분의 경우에 해당 기능이 사용 중지 된 경우를 테스트해서는 안된다는 또 다른 아이디어는 이러한 상태가 일시적이어야하며 가능한 모든 경우에 대한 테스트를 유지하는 노력의 가치가 없기 때문입니다.