首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ATG的Junit和Mockito

ATG的Junit和Mockito
EN

Stack Overflow用户
提问于 2019-01-20 19:57:39
回答 1查看 195关注 0票数 0

我已经创建了一个类,它扩展了CommerceItemManager并覆盖了createCommerceItem方法。现在,我想为这个类编写一个junit和Mockito测试。下面是测试类的基本逻辑:

代码语言:javascript
复制
public class CustomizeCommerceItemManagerTest {

    @Spy @InjectMocks CustomizeCommerceItemManager commerceItemManager;

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

    @Test
    public void shouldDoSomething(){
    }
}

但是,当我运行这个类时,它会抛出一个异常:

atg.nucleus.logging.ClassLoggingFactory.getFactory(ClassLoggingFactory.java:106) at atg.core.i18n.LayeredResourceBundle.(LayeredResourceBundle.java:153) at atg.commerce.order.CommerceItemManager.(CommerceItemManager.java:93) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 原因: java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564):无法找到基本名称atg.nucleus.NucleusResources的捆绑包,java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) at java.util.ResourceBundle.getBundle(ResourceBundle.java:845) at atg.nucleus.GenericContext.(GenericContext.java:113) . 46

我发现CommerceItemManager内部有一个参数:

代码语言:javascript
复制
protected static ResourceBundle sResourceBundle = LayeredResourceBundle.getBundle("atg.commerce.order.OrderResources", LangLicense.getLicensedDefault());

我尝试过使用PorwerMock来模拟这个参数,但是没有帮助。

代码语言:javascript
复制
@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() {
    }
} 

有人能给我提个建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-15 09:36:26

我也有类似的问题,并且像你一样使用Powermock解决了这个问题,并创建了一个假ResourceBundle。

代码语言:javascript
复制
@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);
}

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54280391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档