2014-03-12 7 views
7

단일 열거 형 (How to mock an enum singleton class using Mockito/Powermock? 사용)을 조롱하는 것은 가능하지만 1000 열거 형 값이 있고 5 가지 생성자를 호출 할 수 있다는 것을 알고 있습니다. 열거 형 값은 개발 단계에서 종종 변경됩니다.JUnit 테스트 : 조롱하여 열거 형 생성자를 억제 하시겠습니까?

내 JUnit 테스트를 위해 실제로 한 두 가지만 모의하고 싶습니다. 나머지는 신경 쓰지 않지만 파일 시스템에서 열거 형의 값을로드하는 불쾌한 요소를 호출하는 여전히 인스턴스화되어 있습니다.

예 알아요. 매우 나쁜 디자인입니다. 그러나 지금은 그것을 바꿀 시간이 없습니다.

현재 Mockito/powermock을 사용 중입니다. 그러나이 프레임을 해결할 수있는 프레임 워크 **는 나쁜 디자인을 환영한다는 것을 의미합니다.

의 내가이 비슷한 열거 있다고 가정 해 봅시다 :

public static enum MyEnum { 
    A(OtherEnum.CONSTANT), 
    B("1"), 
    C("1", OtherEnum.CONSTANT), 
    //...and so on for again 1000 enum values :(

    private double value; 
    private String defaultValue; 
    private OtherEnum value; 

    /* Getter/Setter */ 
    /* constructors */ 
} 
+3

열거 형에서 _setter_? 어, sh **가 맞는 단어입니다. – fge

+2

빠른 수정은'enum'이 조롱 될 수있는'interface'를 구현하는 것일 수도 있습니다. 해킹이지만 지금 테스트를 작성한 다음 리팩터링해야합니다 –

+0

[JMockit] (https://code.google.com/p/jmockit/)을 살펴보십시오. –

답변

1

내가 닉 - 홀트에 동의하는 인터페이스 추가 제안 :

public interface myInterface{ 

    //add the getters/setters you want to test 

} 

public enum MyEnum implements MyInterface{ 

    //no changes needed to the implementations 
    //since they already implement the methods you want to use 

} 

지금 당신이 Mockito의 정상적인 모의 능력을 사용할 수 있습니다 Powermock에 의존하지 않고도

MyInterface mock = Mockito.mock(MyInterface.class); 
when(mock.foo()).thenReturn(...); 
//..etc 
+0

열거 형의 생성자를 호출하지 않으려면 어떻게해야합니까? 그 전화와 비슷한가요? mockito에 대한 나의 경험은 제한적입니다. – keiki

+0

인터페이스 경로를 사용하면 enum이 전혀 사용되지 않으므로 생성자가 호출되지 않습니다. – dkatzel

+0

Enumclass.ENUM.isEnabled() 코드가 어딘가에 있으면 이것을 억제 할 수 있습니까? – keiki