我是 Java 开发环境的新手,想了解如何使用 EasyMock 在 Java 中为此类方法编写 UT。
public class MyClass{
public ClassB classBObj;
public int myMethod(SomeClass someClassObj){
ClassA objA = new ClassA();
objA.addParam(classBObj);
ClassC classCObj = objA.getClassCObj(classBObj);
return someClassObj.getResult(classCObj);
}
}
我可以创建 SomeClass、ClassB 的模拟,但如何模拟 ClassA 和 ClassC 的行为?基本上我想定义 ClassA 的行为,即 "addParam"和 "getClassCObj"。我怎样才能做到这一点 ?
我需要测试这个“MyClass”的“myMethod” 谢谢。
最佳答案
因为 ClassA 对象是在方法中实例化的,所以您将无法使用 EasyMock 来模拟它。
如果您愿意不模拟 ClassA 对象,那么您可以添加 ClassB
的模拟实例所需的任何期望,然后使用 capture
来检查ClassC
对象已按预期构建。
所以你的测试看起来像这样:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
public class MyClassTest {
private MyClass myClass;
private SomeClass mockSomeClassObj;
private ClassB mockClassBObj;
@Before
public void setUp() throws Exception {
this.mockSomeClassObj = EasyMock.createMock(SomeClass.class);
this.mockClassBObj = EasyMock.createMock(ClassB.class);
this.myClass = new MyClass();
this.myClass.classBObj = this.mockClassBObj;
}
@Test
public void thatMethodDoesExpectedThings() {
//Add some expectations for how the mockClassBObj is used within the addParam and getClassCObj methods
final Capture<ClassC> classCCapture = new Capture<ClassC>();
EasyMock.expect(this.mockSomeClassObj.getResult( EasyMock.capture(classCCapture) ) ).andReturn(9);
EasyMock.replay(this.mockClassBObj, this.mockSomeClassObj);
final int result = this.myClass.myMethod(this.mockSomeClassObj);
assertThat(result, is(9));
EasyMock.verify(this.mockClassBObj, this.mockSomeClassObj);
final ClassC classCobject = classCCapture.getValue();
//Some assertions about the classC object
}
}
<小时/>
话虽如此,可以使用PowerMock来模拟ClassA类的构造函数(假设您被允许使用PowerMock)
查看根documentation for powermock here以及 Constructor mocking here 的具体文档
关于java - EasyMock:如何测试这个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444957/