NSubstitute - 匹配参数然后执行操作并返回特定值

问题描述 投票:0回答:1

我是

NSubstitue
模拟框架的新手。

我有以下要求:

  1. 匹配
    DoSomething
    参数。
  2. Do 某事(将参数字段之一添加到
    myList
  3. 返回特定值。

代码应该如下所示:

mockDependency.When(x => x.DoSomething(Arg.Is<string>(s => s == "specificParameter")))
    .Do(x => myList.Add(x.Name))
    .Return("ReturnValue");

我知道满足上述要求的唯一方法是执行以下操作:

mockDependency.When(x => x.DoSomething(Arg.Is<string>(s => s == "specificParameter")).Do(x => myList.Add(x.Name))

然后,单独配置返回值:

mockDependency.DoSomething(Arg.Is<string>(s => s == "specificParameter")).Return(myValue)

有没有更简单的方法可以达到要求?

我知道在

fakeItEasy
我可以做这样的事情:

A.CallTo(() => mockDependency.DoSomething(A<string> .That.Matches(x=> x == "specificParameter") )).Invokes(x => myList.Add(x.Name)).Returns(myValue)

c# unit-testing nsubstitute
1个回答
0
投票

您可以将通过

Returns
返回值与使用
AndDoes
执行操作结合起来。

public class Tests
{
    [Fact]
    public void Test2()
    {
        var myList = new List<string>();
        var mock = Substitute.For<IWorker>();

        mock.DoSomething("specificParameter")
            .Returns("ReturnValue")
            .AndDoes(o => myList.Add(o.ArgAt<string>(0)));

        var result = mock.DoSomething("specificParameter");
    }
}   

public interface IWorker
{
    string DoSomething(string value);
}
© www.soinside.com 2019 - 2024. All rights reserved.