【发布时间】:2014-05-06 13:32:25
【问题描述】:
给定一个这样的函数:
public void AddItem( int itemId )
{
if(itemId > 0)
{
Item i = new Item;
i.ItemID = itemId
i.DateChanged = DateTime.Today
_repository.Items_Add(i);
_repository.SaveChanges();
}
}
Items_Add 是一个 void 函数,它只是检查实体框架以查看传递的 Item 是否需要添加或附加/修改并执行相应的工作。
我想使用最小起订量来验证“Items_Add”是否已被调用,并且是预期的对象。
但是,如果我在测试中这样做:
[TestMethod]
public void Assert_AddItem_AddsValidItem
{
Mock<IRepository> repMock = new Mock<IRepository>();
MyViewModel mvm = new MyViewModel(repMock.Object);
mvm.AddItem(1);
Item testItem = new Item();
testItem.ItemID = 1;
testItem.DateChanged = DateTime.Today;
repMock.Verify(m => m.Items_Add(testItem), Times.Once);
}
测试(并非意外)失败,声称函数未按预期调用。
我假设这是因为我在测试中创建的对象“testItem”与在 AddItem 中创建的对象“i”不同,即使它们在功能上相同。 p>
如果这是正确的(如果不是,请告诉我),如何使用 Moq 来验证该函数已被调用并按预期工作?鉴于 Items_Add 不返回任何内容,我不确定是否可以使用 Moq 直接对其进行测试(使用相当于“Returns”构造的东西)。
【问题讨论】:
-
看这个问题如何解决你的问题:stackoverflow.com/questions/14553805/…
标签: c# unit-testing mocking moq