Question

Est-il possible d'utiliser la syntaxe

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

avec StructureMap RhinoAutoMocker?

Dans l'article original de Jeremy Millers AutoMocker dans StructureMap 2.5 Cela semble possible, car RhinoAutoMocker hérite de MockRepository, mais dans la version 2.5.2 de StructureMap, cela semble être implémenté de manière légèrement différente.

Était-ce utile?

La solution

J'ai finalement résolu ce problème en utilisant un AutoMocker et un ServiceLocator personnalisés.

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

Je ne sais toujours pas s’il existe une méthode intégrée pour le faire. Mais cela fonctionne et me épargne de réécrire 1200 tests.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top