断言在验证参数正确的同时调用方法

时间:2014-01-21 17:52:38

标签: unit-testing mocking c#-3.0 rhino-mocks-3.5

鉴于我的测试中的以下片段:

var mockProvider = MockRepository.GenerateMock<IItemProvider>();

var target = new ItemService(mockProvider);

target.SaveItem(item);

内部target.SaveItem拨打电话:

provider.SaveItem(new SaveContract(item.Id, user, contents));其中provider是传入mockProvider的本地名称。

我如何:

  1. 验证provider.SaveItem被称为 ,同时
  2. 断言item.Idusercontents的值应该是正确的。
  3. 我想我可以使用mockProvider.AssertWasCalled,但无法弄清楚设置传递给SaveContract的构造函数的参数条件的语法。

    TIA

1 个答案:

答案 0 :(得分:0)

好的,基于this,我做了类似以下的事情:

var mockProvider = MockRepository.GenerateMock<IItemProvider>();
var target = new ItemService(mockProvider);
Item testItem = null;

mockProvider.Expect(c => c.SaveItem(Arg<Item>.Is.Anything))
.WhenCalled(call =>
{
    testItem = (Item)call.Arguments[0];
});


target.SaveItem(item);//item initialised elsewhere


Assert.AreEqual(item.Id, testItem.Id);