例如假设我有这个类:有没有办法使用EasyMock部分模拟对象?
public class Foo Implements Fooable {
public void a() {
// does some stuff
bar = b();
// moar coadz
}
public Bar b() {
// blah
}
// ...
}
而且我想测试Foo.a
。我想模拟Foo.b
,因为我正在单独测试该方法。什么我想象的是这样的:
public class FooTest extends TestCase {
public void testA() {
Fooable foo = createPartialMock(
Fooable.class, // like with createMock
Foo // class where non-mocked method implementations live
);
// Foo's implementation of b is not used.
// Rather, it is replaced with a dummy implementation
// that records calls that are supposed to be made;
// and returns a hard coded value (i.e. new Bar()).
expect(foo.b()).andReturn(new Bar());
// The rest is the same as with createMock:
// 1. Stop recording expected calls.
// 2. Run code under test.
// 3. Verify that recorded calls were made.
replay(foo);
foo.a();
verify(foo);
}
}
我知道我可以写我自己Foo
子做这样的事情对我来说。但是如果我不必这样做,我不想这样做,因为它很乏味,即应该是自动化的。
谢谢您创建部分模拟!不幸的是,你似乎需要Junit 4才能使用classextensions :(:http://easymock.org/EasyMock2_2_ClassExtension_Documentation.html我想这意味着Junit 3用户运气不好。 – allyourcode
Ohh ...这是一个很好的信息我也是......我对你的案例有一个想法...但它并没有使用简单的模拟,而是通过覆盖这些方法来创建嘲笑,并从扩展的Mock类返回模拟'Bar'对象。 – raddykrish
从EasyMock 3.1开始,ClassExtensions库已被弃用,部分模拟已被移植到EasyMock本身。这说明它可以与JUnit 3一起使用,所以你可能会很幸运:http://easymock.org/EasyMock3_1_Documentation.html – DoctorRuss