我有一个单元测试方法需要在我正在测试的类中模拟(存根?)两个存储库方法调用。我到目前为止所做的每个例子都显示了Mock的一种设置方法,但现在我需要两个。
示例:
_employeeRepositoryMock.Setup(e => e.GetEmployees())
.Returns(new Employee[]
{
new Employee
{
Name = "John Doe"
}
});
_employeeRepositoryMock.Setup(e => e.UpdateEmployee(1)).Returns(true);
Assert.IsTrue(_employeeService.UpdateEmployeeRecords() > 0);
_employeeRepositoryMock.Verify(gr => gr.UpdateEmployee(1), Times.Exactly(1));
在这个例子中,我需要模拟两个在“UpdateEmployeeRecords()”中调用的存储库方法,但我不确定如何。
更新
抓住这整个问题 - 我忽略了一些简单的事情。我传递了UpdateEmployee的错误数值,导致Assert失败。我将模拟中的参数更改为It.IsAny而不是让它通过。
答案 0 :(得分:0)
您可以通过创建方法应返回的数据类型(在我的情况下为List<int>
和List<string>
)并使用.Returns
返回来执行此操作。现在,只要调用DoSomething()
方法,它就会在调用DoSomethingElseThatIsReallyCool()
方法时将intResult List作为模拟数据和stringResult List返回:
//Test method
{
List<int> intResult = new List<int>();
intResult.Add(0);
List<string> stringResult = new List<string>();
stringResult.Add("test");
_reposMock.Setup(r=>r.DoSomething()).Returns(intResult);
_reposMock.Setup(r=>r.DoSomethingElseThatIsReallyCool()).Returns(stringResult);
Assert.IsTrue(_reposMock.SomeMethod() > 0);
}
答案 1 :(得分:0)
您的设置方法似乎没问题。由于某些其他原因,您的断言必定是失败的。一些想法: