Junit и Mockito для ATG - PullRequest
       9

Junit и Mockito для ATG

0 голосов
/ 20 января 2019

Я создал класс, который расширил CommerceItemManager и переопределил метод createCommerceItem.А теперь я хочу написать тест для джунитов и мокито для этого класса.Вот основная логика для тестового класса:

public class CustomizeCommerceItemManagerTest {

    @Spy @InjectMocks CustomizeCommerceItemManager commerceItemManager;

    @Before
    public void setUp(){
        initMocks(this);
    }

    @Test
    public void shouldDoSomething(){
    }
}

Но когда я запускаю этот класс, он выдает исключение:

java.lang.ExceptionInInitializerError at atg.nucleus.logging.ClassLoggingFactory.getFactory (ClassLoggingFactory.java:106) по адресу atg.core.i18n.LayeredResourceBundle. (LayeredResourceBundle.java:153) по адресу atg.commerce.order.CommerceItemManager. (CommerceItemMlector.or..newInstance0 (собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)

Причина: java.util.MissingResourceException: Не удается найти пакет для базового имени atg.nullus.языковой стандарт en_US на java.util.ResourceBundle.throwMissingResourceException (ResourceBundle.java:1564) на java.util.ResourceBundle.getBundleImpl (ResourceBundle.java:1387) на java.util.ResourceBundle.get8undlej.nucleus.GenericContext. (GenericContext.java:113) ... еще 46

Я обнаружил, что внутри CommerceItemManager есть параметр:

protected static ResourceBundle sResourceBundle = LayeredResourceBundle.getBundle("atg.commerce.order.OrderResources", LangLicense.getLicensedDefault());

, и я попытался использовать PorwerMock для насмешки этого параметра, но это не помогает.

@RunWith(PowerMockRunner.class)
@PrepareForTest({LayeredResourceBundle.class})
public class CustomizeCommerceItemManagerTest {

    private CustomizeCommerceItemManager commerceItemManager;

    @Before
    public void setUp() {
        mockStatic(LayeredResourceBundle.class);
        when(LayeredResourceBundle.getBundle("atg.commerce.order.OrderResources", LangLicense.getLicensedDefault())).thenReturn(null);
        commerceItemManager = PowerMockito.spy(new CustomizeCommerceItemManager());
    }

    @Test
    public void shouldDoSomething() {
    }
} 

Может кто-нибудь дать мнепредложение

1 Ответ

0 голосов
/ 15 февраля 2019

У меня была похожая проблема, и я решил ее, используя Powermock, как и вы, и создав поддельный ResourceBundle.

@Before
public void setUp() throws Exception {

     ResourceBundle resourceBundle = new ResourceBundle() {
        @Override
        protected Object handleGetObject(String key) {
            return "fake_translated_value";
        }

        @Override
        public Enumeration<String> getKeys() {
            return Collections.emptyEnumeration();
        }
    };

    mockStatic(LayeredResourceBundle.class);
    when(LayeredResourceBundle.getBundle(anyString(), any(java.util.Locale.class))).thenReturn(resourceBundle);
}

Надеюсь, это поможет.

...