java-检查EasyMock模拟是否处于重播模式/状态

是否可以确定EasyMock模拟是否处于重播模式?

就像是:

if (EasyMock.isReplayed(mock))
  // do something

解决方法:

为了检查模拟的状态,您需要取消代理的模拟并检查为该模拟设置的状态,其中一个状态是ReplayState.当EasyMock与Java Proxies一起使用时,这非常容易:

EasyMock.replay(mock); // setting replay state to a mock object

// stripping proxy and getting the invocation handler
InvocationHandler invocationHandler = Proxy.getInvocationHandler(mock); 


// for easyMock, invocation handler holds the state of the mock 
ObjectMethodsFilter objectMethodsFilter = (ObjectMethodsFilter) invocationHandler; 

// not the not so elegant part:
// this: objectMethodsFilter.getDelegate().getControl().getState() 
// retrieves  the state instance that can be checked if it is an 
// instance of ReplayState.class
boolean inReplayState = objectMethodsFilter.getDelegate()
    .getControl().getState() instanceof ReplayState;

就是这样!这将显示为true,因为已将其设置为Replay

也许对于3.1版,您可以使用:

ClassExtensionHelper.getControl(mock).getState() instanceof ReplayState

ClassExtensionHelper.getControl() javadoc

上一篇:java-Easymock部分模拟(EasyMock ClassExtension),好还是坏?


下一篇:java-如何使用easymock Capture测试