开发者

StrucutureMap RhinoMock Record/Playback, Example needed

I'm looking for some examples on how to do the following Mock Tests using StructureMap or Unity with NUnit.

I have the following code structure

public interface IDAL
{
    List<Model> Method1(int id);
}

public class DAL : IDAL
{
   public List<Model> Method1(int id)
   {
        List<Model> retval = new List<Model>();
        DbCommand cmd = GetStoredProcCommand("Mode开发者_JAVA百科l_Method1");
        using (IDataReader dr = DB.ExecuteReader(cmd))
        {
            LoadEntityBaseList(retval, dr, PopulateDomain);//populate list based on reader
        }
        return retval;
   }
}

public class Manager
{
   private readonly IDAL m_DAL;
   public Manager()       
   {
        ObjectFactory.Initialize(x => x.ForRequestedType<IDAL>());
        m_DAL = ObjectFactory.GetInstance<IDAL>();

   }

   public List<Domain> Method1(int id)
   {
        return m_DAL.Method1(id);

   }
}

[TestFixture]
public class ManagerTests
    [Test]
    public void Method1_Calls_DAL()
    {

        var list = new List<Model>();
        using (m_mock.Record())
        {
            Expect.Call(_dal.Method1(1)).IgnoreArguments().Return(list);
        }
        using (m_mock.Playback())
        {
            Manager manager = new Manager();
            var actual = manager.Method1(1);
            Assert.That(actual, Is.Not.Null);
        }
    }
}

If I do include the StructureMap configuration It ignores the Mock and Rhino.Mocks.MockRepository.VerifyAll() throws an exception.

If I don't include the structureMap configuration I get No Default Instance defined for PluginFamily MyObject.IDAL.

Can someone point me in the right direction on what I'm doing wrong?


ObjectFactory.Initialize should only be called once during the lifetime of your application, so it does not make sense to call it from a class constructor.

Put the ObjectFactory.Initialize() method somewhere in the beginning of your program (Main() or Application_Start() for the web) then change Manager so that it takes an IDAL as a constructor argument.

ObjectFactory.Initialize(...)
var manager = ObjectFactory.GetInstance<Manager>();

public class Manager {
 public Manager(IDAL dal){
  m_DAL = dal;
 }
 ...
}

Then in your unit test, you do not use StructureMap at all - you just pass in a mocked IDAL to Manager.

using (m_mock.Playback()) {
 Manager manager = new Manager(m_mock);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜