相关疑难解决方法(0)

使用ForPartsOf的NSubstitute虚拟getter返回替换会抛出异常

我试图模拟一个对象的一个​​属性

有一个类似的问题: 返回返回另一个替代的方法的结果会在NSubstitute中引发异常 但是接受的答案对我不起作用.

void Main()
{
    var obj = Substitute.ForPartsOf<MyObject>();
    //WORKS, But I need a partial mock!:
    //var obj = Substitute.For<MyObject>();

    obj.PropClass.Returns(Substitute.For<PropClass>());

    //It's suggestion, Fails, same error:
    //var returnValue = Substitute.For<PropClass>();
    //obj.PropClass.Returns(returnValue);

    //Fails, same error:
    //Lazy implementation of *similar question*
    //Func<PropClass> hello = () => Substitute.For<PropClass>();
    //obj.PropClass.Returns(x => hello());

    //Fails, same error:
    //I believe what *similar question* suggests
    //obj.PropClass.Returns(x => BuildSub());

    obj.PropClass.Dump("Value");
}

public class MyObject
{
    public MyObject()
    {
        _propClasses = new List<PropClass>();
    }
    private readonly IList<PropClass> …
Run Code Online (Sandbox Code Playgroud)

c# mocking nsubstitute

5
推荐指数
1
解决办法
3978
查看次数

当我不期望它与NSubstitute一起调用函数时

在设置我的模拟调用函数时,我得到了一个我从NSubstitute没想到的行为.行为的简化版本是

[Test]
public void NSubstituteTest()
{
    var mockedFoo = Substitute.For<IFoo>();

    mockedFoo.GenerateString(Arg.Any<string>()).Returns(x => GetValue(x.Args()[0]));
    mockedFoo.GenerateString("0").Returns("hi");


    string result1 = mockedFoo.GenerateString("0");
    string result2 = mockedFoo.GenerateString("1");

    Assert.AreEqual("hi", result1);
    Assert.AreEqual("1", result2);
}

private string GetValue(object val)
{
    string returnValue = val != null ? val.ToString() : "I am null";
    System.Diagnostics.Trace.WriteLine(returnValue);
    return returnValue;
}
Run Code Online (Sandbox Code Playgroud)

测试通过,但我得到输出:0 1

这表明调用了mockedFoo.GenerateString("0"); 实际上会导致调用GetValue()函数.

如果我对Moq做同样的事情:

[Test]
public void MoqTest()
{
    var mockedFoo = new Mock<IFoo>();

    mockedFoo.Setup(x => x.GenerateString(It.IsAny<string>())).Returns((object s) => GetValue(s));
    mockedFoo.Setup(x => x.GenerateString("0")).Returns("hi");


    string result1 = mockedFoo.Object.GenerateString("0");
    string result2 = mockedFoo.Object.GenerateString("1"); …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing nsubstitute

3
推荐指数
1
解决办法
1910
查看次数

标签 统计

c# ×2

nsubstitute ×2

mocking ×1

unit-testing ×1