编程语言
首页 > 编程语言> > c# – nsubstitute收到调用特定对象参数

c# – nsubstitute收到调用特定对象参数

作者:互联网

我有一个看起来像这样的类:

public myArguments
{
    public List<string> argNames {get; set;}
}

在我的测试中,我这样做:

var expectedArgNames = new List<string>();
expectedArgNames.Add("test");

_mockedClass.CheckArgs(Arg.Any<myArguments>()).Returns(1);

_realClass.CheckArgs();

_mockedClass.Received().CheckArgs(Arg.Is<myArguments>(x => x.argNames.Equals(expectedArgNames));

但测试失败并显示以下错误消息:

NSubstitute.Exceptions.ReceivedCallsException : Expected to receive a call matching:
    CheckArgs(myArguments)
Actually received no matching calls.
Received 1 non-matching call (non-matching arguments indicated with '*' characters):
    CheckArgs(*myArguments*)

我猜这是因为.Equals(),但我不知道如何解决它?

解决方法:

在您的测试中,您将myArguments类与List< string>进行比较.

您应该将myArguments.argNames与List< string>进行比较.或实现IEquatable< List< string>>在myArguments中.

此外,当您比较List< T>时,您应该使用SequenceEqualsinstead Equals.

第一种选择是:

_mockedClass.Received().CheckArgs(
    Arg.Is<myArguments>(x => x.argNames.SequenceEqual(expectedArgNames)));

第二个是:

public class myArguments : IEquatable<List<string>>
{
    public List<string> argNames { get; set; }

    public bool Equals(List<string> other)
    {
        if (object.ReferenceEquals(argNames, other))
            return true;
        if (object.ReferenceEquals(argNames, null) || object.ReferenceEquals(other, null))
            return false;

        return argNames.SequenceEqual(other);
    }
}

标签:c,unit-testing,nsubstitute
来源: https://codeday.me/bug/20190609/1203423.html