相关疑难解决方法(0)

最终方法嘲笑

我需要使用mockito使用final方法模拟一些类.我写过这样的东西

@Test
public void test() {
    B b = mock(B.class);
    doReturn("bar called").when(b).bar();   
    assertEquals("must be \"overrided\"", "bar called", b.bar());
    //bla-bla
}


class B {
    public final String bar() {
        return "fail";
    }
}
Run Code Online (Sandbox Code Playgroud)

但它失败了.我尝试了一些"黑客",它的确有效.

   @Test
   public void hackTest() {
        class NewB extends B {
            public String barForTest() {
                return bar();
            }
        }
        NewB b = mock(NewB.class);
        doReturn("bar called").when(b).barForTest();
        assertEquals("must be \"overrided\"", "bar called", b.barForTest());
    }
Run Code Online (Sandbox Code Playgroud)

它有效,但"闻起来".

那么,正确的方式在哪里?

谢谢.

java testing unit-testing mocking mockito

60
推荐指数
5
解决办法
6万
查看次数

Java单元测试无法访问ResourceBundle

我正在创建一个Java单元测试来测试我最近更改的一些代码.但是,我测试的方法实例化一个使用ResourceBundle的类...

ResourceBundle.getBundle("businessVariables").getString("product.name"));
Run Code Online (Sandbox Code Playgroud)

资源文件位于Web包中 Mycompany_web/src/main/webapp/WEB-INF/classes/businessVariables.properties

我的测试生活在我的xml包中 Mycompany_xml/src/test/java/uk/co/mycompany/xmlapi/RequestProcessorTestNew.java

在正常运行时,资源包可以访问,但不能在我的单元测试运行时访问.它抛出了这个错误......

Testcase: testCreateInitialStatusResponse(uk.co.mycompany.xmlapi.RequestProcessorTestNew):  Caused an ERROR
null
java.lang.reflect.InvocationTargetException
    at uk.co.mycompany.xmlapi.RequestProcessorTestNew.testCreateInitialStatusResponse(RequestProcessorTestNew.java:62)
Caused by: java.lang.ExceptionInInitializerError
    at uk.co.mycompany.xmlapi.RequestProcessorImpl.createInitialStatusResponse(RequestProcessorImpl.java:812)
Caused by: java.util.MissingResourceException: Can't find bundle for base name businessVariables, locale en_US
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我可以启用测试以某种方式查看资源包吗?我可以在某处以某种方式创建一个模拟资源文件,代码将能够看到吗?

java junit unit-testing easymock resourcebundle

5
推荐指数
1
解决办法
8956
查看次数

单元测试使用资源包的静态方法

我已经阅读了很多关于使用Powermock和Mockito的文章,并尝试了很多不同的方法,但我仍然无法弄清楚如何对下面的静态方法进行单元测试.

public static Map<String, String> getEntries() {
    Map<String, String> myEntriesMap = new TreeMap<String, String>();
    ResourceBundle myEntries = ResourceBundle.getBundle(ENTRIES_BUNDLE);
    Enumeration<String> enumList = myEntries.getKeys();
    String key = null;
    String value = null;
    while (enumList.hasMoreElements()) {
        key = enumList.nextElement().toString();
        value = myEntries.getString(key);
        myEntriesMap.put(key, value);
    }
    return myEntriesMap;
}
Run Code Online (Sandbox Code Playgroud)

代码是包含大约30个这样的静态方法的(遗留)类的一部分,并且重构实际上不是一个选项.类似地,在一些其他静态方法中,正在检索DB连接.

例如:如何模拟资源包ENTRIES_BUNDLE并对此方法进行单元测试?我正在寻找一种可以普遍适用于所有静态方法的模式.

java unit-testing junit4 mockito powermock

1
推荐指数
2
解决办法
6798
查看次数