2

是否可以模拟超类的方法?(不被覆盖)

public class FooBarTest {

    @Test
    public void test() {
        Bar bar = Mockito.spy(new Bar());
        Mockito.doReturn("Mock!").when((Foo) bar).test();

        String actual = bar.test(); // returns only "Mock!"
        assertEquals("Mock! Bar!", actual);
    }

    public static class Foo {
        public String test(){
            return "Foo!";
        }
    }

    public static class Bar extends Foo {
        @Override
        public String test(){
            return super.test()+" Bar!";
        }
    }
}

Off:如何在此处突出显示代码?

4

1 回答 1

1

这是一种使用 JMockit 模拟 API 的解决方案:

public class FooBarTest
{
    @Test
    public void test()
    {
        final Bar bar = new Bar();
        new NonStrictExpectations(Foo.class) {{ bar.test(); result = "Mock!"; }};

        String actual = bar.test();
        assertEquals("Mock! Bar!", actual);
    }

    public static class Foo {
        public String test() { return "Foo!"; }
    }

    public static class Bar extends Foo {
        @Override
        public String test() { return super.test() + " Bar!"; }
    }
}
于 2013-01-29T11:10:41.137 回答