Domanda

È possibile usare la sintassi

using(_mocks.Record())
{
   //...
}
using(_mocks.Playback())
{
   //...
}

con StructureMap RhinoAutoMocker?

Nel post originale di Jeremy Millers AutoMocker in StructureMap 2.5 questo sembra possibile poiché RhinoAutoMocker eredita MockRepository, ma nella versione 2.5.2 di StructureMap sembra implementato in modo leggermente diverso.

È stato utile?

Soluzione

Ho finalmente risolto questo problema usando AutoMocker e ServiceLocator scritti personalizzati.

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();
    }
}

Non so ancora se esiste un modo integrato per farlo. Ma questo funziona e mi salva dalla riscrittura di 1200 test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top