是否可以使用语法
using(_mocks.Record())
{
//...
}
using(_mocks.Playback())
{
//...
}
使用StructureMap RhinoAutoMocker?
在Jeremy Millers的原始帖子AutoMocker in StructureMap 2.5 中,这似乎是可能的,因为RhinoAutoMocker继承了MockRepository,但在StructureMap的2.5.2版中,这似乎是以稍微不同的方式实现的。
答案 0 :(得分:2)
我终于使用自定义编写的AutoMocker和ServiceLocator解决了这个问题。
public class RecordPlaybackRhinoAutoMocker<TARGETCLASS> : AutoMocker<TARGETCLASS> where TARGETCLASS : class
{
private RecordPlaybackMocksServiceLocator MockRepository
{
get
{
return _serviceLocator as RecordPlaybackMocksServiceLocator;
}
}
public RecordPlaybackRhinoAutoMocker()
{
_serviceLocator = new RecordPlaybackMocksServiceLocator();
_container = new AutoMockedContainer(_serviceLocator);
}
public IDisposable Record()
{
return MockRepository.Record();
}
public IDisposable Playback()
{
return MockRepository.Playback();
}
}
public class RecordPlaybackMocksServiceLocator : StructureMap.AutoMocking.ServiceLocator
{
private readonly MockRepository _mocks;
public RecordPlaybackMocksServiceLocator()
{
_mocks = new MockRepository();
}
public T PartialMock<T>(params object[] args) where T : class
{
return _mocks.PartialMock<T>(args);
}
public object Service(Type serviceType)
{
return _mocks.StrictMock(serviceType);
}
public T Service<T>() where T : class
{
return _mocks.StrictMock<T>();
}
public IDisposable Record()
{
return _mocks.Record();
}
public IDisposable Playback()
{
return _mocks.Playback();
}
}
我仍然不知道是否有内置的方法来做到这一点。但是这有效并且使我免于重写1200次测试。