相关疑难解决方法(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 ×1

mocking ×1

mockito ×1

testing ×1

unit-testing ×1