0

我正在对我的一些 c# 代码进行单元测试,我必须使用相同的模拟但返回不同的值。例如,我想在我的单元测试中这样做:

[Test]

_mockDatabase.Setup(x => x.Query(It.IsAny<Filter>())).Returns(List[0]).Verifiable();

_mockDatabase.Setup(x => x.Query(It.IsAny<Filter>())).Returns(List[1]).Verifiable();

有没有办法在不改变我的实际代码的情况下解决这个问题。

4

1 回答 1

2

这通常可以通过使用Queue类来解决(请注意,Stack类似的数据结构也可以使用):

var queue = new Queue<string>(new [] { "First query", "Second query" });
// You only need 1 setup call
_mockDatabase
    .Setup(x => x.Query(It.IsAny<Filter>()))
    .Returns(() => queue.Dequeue())
    .Verifiable();

每次后续调用Query都将从队列中取出当前元素。两次调用上面的模拟,将产生"First query"然后是"Second query"

于 2013-01-08T08:45:13.930 回答