【问题标题】:Mocking an insert method of a repository模拟存储库的插入方法
【发布时间】:2013-02-20 14:23:20
【问题描述】:

我想对以下方法进行单元测试:

void Insert(TEntity entity);

这个方法的类已经被模拟了(我正在使用 Moq)。

现在我想做一个基于状态的测试并告诉 Moq 如果这个方法被调用,一个对象必须被插入到一个列表中。 我该怎么做?

useraccountRepository.Setup(r => r.Insert(useraccountBeforeLogin)).???

这里有什么?有一个 raises 方法可以引发一个事件。我可以用这个吗?

【问题讨论】:

    标签: unit-testing mocking moq


    【解决方案1】:

    我知道这是一个旧线程,但这是我为测试从模拟存储库插入的项目所做的,希望这可能对某人有所帮助。

    var myRepositoryMock = new Mock<IMyRepository>();
    
    var itemsInserted = new List<MyItem>();
    
    myRepositoryMock 
        .Setup(i => i.InsertItem(It.IsAny<MyItem>()))
        .Callback((MyItem item) => itemsInserted.Add(item));
    

    【讨论】:

      【解决方案2】:

      您可以使用callbacks - 这里列出了一些示例

      【讨论】:

      • 谢谢。基本上它现在可以工作了: List useraccountsAfterRegister = new List(); useraccountRepository.Setup(r => r.Insert(useraccountBeforeLogin)).Callback( () => useraccountsAfterRegister.Add(useraccountAfterLogin));但这是一个基于真实状态的测试吗?也可以是交互测试,因为我告诉模型在调用插入方法时会发生什么。
      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多