EasyMock的构造有很多争论

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。

+2

你不能使用'null'值? – Keppil

+0

是的,但是如果你有spring bean,那么可能有30个参数给构造函数,而且当我只关心2个参数时,排队所有参数和放置28个nulls是很烦人的。我希望有一些EasyMock的幻想。 – REMOSEWA

您需要阅读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()并让它返回你需要的任何对象。