2009-01-23 18 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