我有以下课程:
public abstract class AbstractParent { static String method() { return "OriginalOutput"; } }
我想嘲笑这个方法.我决定使用JMockit.所以我创建了一个模拟类:
public class MockParent { static String method() { return "MOCK"; } }
我的测试代码如下所示:
public class RealParentTest { @Before public void setUp() throws Exception { Mockit.redefineMethods( AbstractParent.class, MockParent.class ); } @Test public void testMethod() { assertEquals(MockParent.method(),AbstractParent.method()); } }
不幸的是,这个测试表明AbstractParent返回"OriginalOutput"而不是"MOCK".有什么想法吗?难道我做错了什么?我已经尝试将我的模拟类声明为抽象,但无济于事.
编辑注意,使方法公开会导致测试运行没有问题...这很奇怪,因为使用JMockit,您应该能够模拟任何范围的方法.
回答只有mock方法需要公开,你可以保留原来的方法.
找到了解决方案:你只需要将mock的方法设为public(原始方法可以保持其原始可见性).
我不知道为什么这种方法有效,而原始方式却没有(有人欢迎加入),但你需要做的只是将上面例子中的mock类更改为:
public class MockParent { public static String method() { return "MOCK"; } }