Pergunta

É possível utilizar a sintaxe

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

com StructureMap RhinoAutoMocker?

Em Jeremy Millers post original AutoMocker em StructureMap 2,5 isso parece possível desde que RhinoAutoMocker herda MockRepository, mas na versão 2.5.2 do StructureMap este parece ser implementadas de uma forma ligeiramente diferente.

Foi útil?

Solução

Eu finalmente resolvido isso usando um personalizado escrito AutoMocker e 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();
    }
}

Eu ainda não sei se há um construído em forma de fazer isso. Mas isso funciona e me poupa de reescrita 1200 testes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top