开发者

rhino mocks mocking a call

开发者 https://www.devze.com 2022-12-17 06:47 出处:网络
I have a method that I want to test which hits the database.From what I have read this is a perfect oppurtunity to use a mock.However the problem that I am facing is that I pass the object a string an

I have a method that I want to test which hits the database. From what I have read this is a perfect oppurtunity to use a mock. However the problem that I am facing is that I pass the object a string and then it creates an object and hits the db with this object i.e.

public void test(string t)
{
   Test t1 = new Test(t);
   db.Save(t1);
}
开发者_Python百科

Then the in the test I have:

using(mockery.Record)
{
   Expect.Call(db.Save( ??? ))
}

The problem being - what do I expect here? A call to:

Expect.call(db.Save(new Test(t))

does not work.

As I am new to mocking this may be an easy question, but any help will be much appreciated.

thanks


Well often you pass the actual instance which you later expect. For example:

public void test(string t)
{
    Test t1 = new Test(t);
    using(mockery.Record)
    {
       Expect.Call(db.Save(t1));
    }
    using(mockery.Playback()
    {       
        db.Save(t1);
    }
    mockery.VerifyAll();
}

But this is maybe to limiting. Then you can actually define criterias which the argument has to fullfill. For example:

using(mockery.Record)
{
   Test instanceToCompare = new Test(t);    
   Expect.Call(db.Save(Arg<Test>.Is.Equal(instanceToCompare)));
}

Or another example:

using(mockery.Record)
{
   Expect.Call(db.Save(Arg<Test>.Matches(t=>t.Name.Length.Equals("Test"))));        
}
0

精彩评论

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