EasyMock的构造有很多争论
问题描述:
所以比方说,我有一些类中定义:EasyMock的构造有很多争论
MyClass {
private A _a;
private B _b;
private C _c;
MyClass(A a, B b, C c) {
_a = a;
_b = b;
_c = c;
}
public someMethodIDontCareAbout() {
_b.doSomething();
_c.doSomething();
}
public someMethodIWantToTest() {
_a.doSomething();
}
}
现在,让我们说,我只是想测试someMethodIWantToTest(),但我不关心其他的方法。我宁愿不必创建一个新的MyClass对象和模拟类B和C.该构造函数需要它们,但我没有使用它们,因为我的方法我想测试只使用答:
有没有办法在容易模拟说EasyMock.createMockBuilder(MyClass.class).withConstructor(EasyMock.createNiceMock(A.class)).createMock();
有没有构造函数只需要类A,但这就是我想要的。如果没有指定B和C,没有简单的方法可以做到这一点吗?理想情况下,它会为我不想要的构造函数中的所有其他参数创建niceMocks。
答
您需要阅读Mockito如何工作。 其基本思想是它扩展了你的类,并且覆盖了所有的方法,并且允许你返回你想要的东西。
语法是:
MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.getMethod()).thenReturn(whatever);
同样适用于EasyMock的。
MyClass myClass = EasyMock.createMock(MyClass.class);
EasyMock.expect(myClass.getMethod).andReturn(whatever).times(1);
答
实际上,如果您重构构造函数以接收Config对象而不是参数列表,那么这会容易得多。
ie如果您有一个Config对象,其中包含A,B和C的getter和setter,并且只需将一个Config对象传递给构造函数,那么您可以为Config对象创建一个niceMock,然后模拟get方法getA()并让它返回你需要的任何对象。
你不能使用'null'值? – Keppil
是的,但是如果你有spring bean,那么可能有30个参数给构造函数,而且当我只关心2个参数时,排队所有参数和放置28个nulls是很烦人的。我希望有一些EasyMock的幻想。 – REMOSEWA