如何用Easymock

时间:2017-02-17 12:41:54

标签: java unit-testing easymock

我正在尝试使用EasyMock对一个类进行单元测试。为简化起见,我在下面做了一个例子。我想要的是在测试期间将StringBuilder实例替换为EasyMock实例。 (因为它不是我想要测试的StringBuilder的功能。)不幸的是,这在以下示例中不起作用。在其他测试中,我通过使用EasyMock实例设置实例变量来解决方法,但是使用此示例我无法执行此操作,因为它是我关心的本地实例化对象。

谁能帮助我?

要测试的课程:

package example.easymock

public class Example {

    public String exampleMethod() {
        StringBuilder string = new StringBuilder();
        string.append("hello");
        return string.toString();
    }
}

测试类:

package example.easymock

import needed classes

public class ExampleTest {

    @Test
    public void exampleMethodTest() {
        StringBuilder stringMock = EasyMock.createMock();
        Example example = new Example();
        stringMock.append("hello");
        EasyMock.expect(stringMock.toString()).andReturn("hi");

        EasyMock.replay(stringMock);

        example.exampleMethod();
     }
}

1 个答案:

答案 0 :(得分:2)

仅使用EasyMock它是不可能的。 PowerMock确实包含了这样做的权力:

expectNew(StringBuilder.class).andReturn(stringMock);

您需要正确设置PowerMock配置才能正常工作 - 请参阅更多here

这并没有改变这一事实,正是这种不可能性(部分)导致广泛采用Inversion of Control作为设计原则。此外,作为一项规则,您无法测试的任何方法都是可以重构为更好(和可测试)的方法。只有当代码本身无法更改时,PowerMock才能用于测试。

当然,假设StringBuilder仅仅是一个例子,而不是字面上你想要做的事情。如果是 - 请不要打扰,您可以假设任何属于语言库的方法都像宣传的那样工作。