java - EasyMock:如何测试这个方法

标签 java unit-testing easymock

我是 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/

相关文章:

java - rmi 调用 weblogic 的高响应时间

java - 如何覆盖单元测试中被测试类调用的方法

java - 有没有办法在java项目中阻止EasyMock的良好控制?

java - 我如何访问对象属性和对象方法?

java - 当文件位于 Maven 项目的资源文件夹中时,使用 selenium WebDriver 打开文件

unit-testing - 测试 : Running selective unit tests with specific DataRow Value

javascript - Cypress 测试框架

Objective-C 初始化(静态方法)调用了不止一次?

java - EasyMock 和修改可变方法参数

java - 在MyBatis中插入子对象