描述: 试图模拟这个类(来自某个库):
public class Signal{
public static Signal fromPool(){
// returns a recycled instance from a signal pool
}
public int getCode(){
// returns some signal code;
}
}
班级Sender
在内部使用Signal.fromPool()
:
public class Sender{
private Signal sig;
public void ready(){
sig = Signal.fromPool();
System.out.println(sig);
}
public void send(OutputStream output){
output.write(sig.getCode());
}
}
我们需要为Sender
编写一些单元测试。
但是,在单元测试环境中,Signal.fromPool()
将失败,因为环境缺少一些内部依赖项。
因此,我们决定使用“JMockit”来模拟Signal
类:
public class SenderTest{
// mock signal class
static class MockSignal extends Mockup<Signal>{
@Mock
public static Signal fromPool(){
return new Signal();
}
@Mock
public int getCode(){
return 42;
}
}
@Test
public void testSending(@Mocked OutputStream stream){
// replace Signal with MockSignal
new MockSignal();
// should write 42
new Expectations(){{
stream.write(42);
}};
// test code
Sender sender = new Sender();
sender.ready();
sender.send(stream);
}
}
问题:模拟Signal.fromPool
会返回null
。上面代码中的此语句打印null
:
System.out.println(sig);
我的理解是,也许在被模拟的fromPool
里面,Mocked类本身没有被实例化:
@Mock
public static Signal fromPool(){
return new Signal();
}
new Signal
如何返回null
?任何人都有更好的观点?