簡體   English   中英

如何通過NSubstitute監視方法返回值

[英]How to spy method return value by NSubstitute

我想在NSubstitute中監視模擬接口的模擬方法的返回值。 我得到了Received函數的返回值,但始終返回null

public interface IFactory
{
    object Create();
}

public interface IMockable
{
    object SomeMethod();
}

public class Mockable : IMockable
{
    private readonly IFactory factory;

    public Mockable(IFactory factory)
    {
        this.factory = factory;
    }

    public object SomeMethod()
    {
        object newObject = factory.Create();
        return newObject;
    }
}

public class TestClass
{
    [Fact]
    void TestMethod()
    {
        var factory = Substitute.For<IFactory>();
        factory.Create().Returns(x => new object());
        IMockable mockable = new Mockable(factory);
        object mockableResult = mockable.SomeMethod();
        object factoryResult = factory.Received(1).Create();
        Assert.Equal(mockableResult, factoryResult);
    }
}

我希望mockableResultfactoryResult相等,但是factoryResultnull

那是因為您使用不正確。 Received是關於被調用方法的斷言。 它不會從模擬成員中返回可用值。

查看行為符合預期的測試的以下修改版本。

public class TestClass {
    [Fact]
    void TestMethod() {
        //Arrange
        object factoryResult = new object(); //The expected result
        var factory = Substitute.For<IFactory>();
        factory.Create().Returns(x => factoryResult); //mocked factory should return this
        IMockable mockable = new Mockable(factory);

        //Act
        object mockableResult = mockable.SomeMethod(); //Invoke subject under test

        //Assert
        factory.Received(1).Create(); //assert expected behavior
        Assert.Equal(mockableResult, factoryResult); //objects should match
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM