我想使用以下链接中建议的模式 1: https ://code.google.com/p/mockito/wiki/MockingObjectCreation 并具有以下类:
public class MyClass {
private AnyType anyObject;
private Foo foo; // Foo is a thirdparty class
public MyClass(AnyType anyObject) {
//...
foo = makeFoo();
}
private Foo makeFoo() {
return new Foo();
}
}
我正在尝试进行如下测试:
@Test
public void myTestMethod() {
MyClass myClass = Mockito.spy(new MyClass());
// now i want to do something like this:
Foo mockFoo= Mockito.mock(Foo.class);
// Mockito.doReturn(mockFoo).when(myClass).makeFoo());
}
问题是我的工厂方法 makeFoo 是一个私有方法,所以我无法访问它。我不想公开它只是为了测试。我的测试类也与我的生产代码不在同一个包中,因此仅对包可见是行不通的。
更新:现在我发现了另一个问题。假设 makeFoo() 是公共的,'mockFoo' 也不会被返回,但真正的 makeFoo() 方法会被调用。这是因为 makeFoo() 的调用(在 MyClass 的构造函数中)在创建 mockFoo 之前。
有谁知道如何解决这个问题,或者我做错了什么?
提前谢谢你们的帮助!!