2

構文を使用することは可能ですか

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

StructureMap RhinoAutoMocker で?

Jeremy Millers の元の投稿AutoMocker in StructureMap 2.5では、RhinoAutoMocker が MockRepository を継承しているため、これは可能と思われますが、バージョン 2.5.2 の StructureMap では、これは少し異なる方法で実装されているようです。

4

1 に答える 1

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 個のテストを書き直す必要がなくなりました。

于 2009-01-27T09:54:09.873 に答える