2009-01-23 71 views

回答

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次测试。

+0

你有没有找到一种“内置”的方式来做到这一点? – mxmissile 2011-02-07 17:28:10