如何模拟测试中不存在的枚举值?

时间:2015-03-06 09:01:46

标签: java unit-testing enums mockito

我有以下方法:

public void methodToTest(Locale locale){
            switch (locale) {
                case EN:
                    ...
                    break;
                case FR:
                    ...
                    break;
                default:
                    throw new IllegalArgumentException(String.format("Unexpected locale: %s", String.valueOf(locale)));
            }
}

并遵循枚举:

public enum Locale {EN,FR}

请帮我覆盖交换机的默认分支。我没有想法如何实现它。

1 个答案:

答案 0 :(得分:0)

我写了以下代码:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({Locale.class})
    public class MyTest {
        @Test(expected = IllegalArgumentException.class)
        public void methodToTestTest() {
            SupportedLocale supportedLocaleMock = PowerMockito.mock(Locale.class);
            PowerMockito.mockStatic(Locale.class);
            Whitebox.setInternalState(supportedLocaleMock, "name", "Default");
            Whitebox.setInternalState(localeMock, "ordinal", 2);
            PowerMockito.when(SupportedLocale.values()).thenReturn(new SupportedLocale[]{SupportedLocale.EN, SupportedLocale.FR, supportedLocaleMock});
            PowerMockito.when(SupportedLocale.valueOf("default value")).thenReturn(supportedLocaleMock);

            objectToTest.methodToTest(SupportedLocale.valueOf("default value"));
        }
    }