如何用 Easymock 替换我的实例
How do I replace my instances with Easymock
我正在尝试使用 EasyMock 对 class 进行单元测试。为了简化事情,我在下面做了一个例子。我想要的是在测试期间将 StringBuilder 实例替换为 EasyMock 实例。 (因为它不是我要测试的 StringBuilder 的功能。)不幸的是,这在下面的示例中不起作用。在其他测试中,我有一个解决方法,通过使用 EasyMock 实例设置实例变量,但是对于这个例子,我无法做到这一点,因为它是我关心的本地实例化对象。
谁能帮帮我?
要测试的class:
package example.easymock
public class Example {
public String exampleMethod() {
StringBuilder string = new StringBuilder();
string.append("hello");
return string.toString();
}
}
测试class:
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();
}
}
仅使用 EasyMock
这是不可能的。 PowerMock
确实包含这样做的权力:
expectNew(StringBuilder.class).andReturn(stringMock);
您当然需要正确设置 PowerMock 配置才能正常工作 - 查看更多 here
这并没有改变事实,正是这种不可能(部分)导致广泛采用 Inversion of Control 作为设计原则。此外,通常,您无法测试的任何方法都是可以重构为更好(和可测试)的方法。 PowerMock 只应在代码本身无法更改为更好时用于测试。
这当然是假设 StringBuilder
只是一个例子,而不是您真正想要做的。如果是 - 不要打扰,您可以假设作为语言库一部分的任何方法都像宣传的那样工作。
我正在尝试使用 EasyMock 对 class 进行单元测试。为了简化事情,我在下面做了一个例子。我想要的是在测试期间将 StringBuilder 实例替换为 EasyMock 实例。 (因为它不是我要测试的 StringBuilder 的功能。)不幸的是,这在下面的示例中不起作用。在其他测试中,我有一个解决方法,通过使用 EasyMock 实例设置实例变量,但是对于这个例子,我无法做到这一点,因为它是我关心的本地实例化对象。
谁能帮帮我?
要测试的class:
package example.easymock
public class Example {
public String exampleMethod() {
StringBuilder string = new StringBuilder();
string.append("hello");
return string.toString();
}
}
测试class:
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();
}
}
仅使用 EasyMock
这是不可能的。 PowerMock
确实包含这样做的权力:
expectNew(StringBuilder.class).andReturn(stringMock);
您当然需要正确设置 PowerMock 配置才能正常工作 - 查看更多 here
这并没有改变事实,正是这种不可能(部分)导致广泛采用 Inversion of Control 作为设计原则。此外,通常,您无法测试的任何方法都是可以重构为更好(和可测试)的方法。 PowerMock 只应在代码本身无法更改为更好时用于测试。
这当然是假设 StringBuilder
只是一个例子,而不是您真正想要做的。如果是 - 不要打扰,您可以假设作为语言库一部分的任何方法都像宣传的那样工作。