c# - 如何从带有 NSubstitute 的模拟对象返回一个对象(即 List<string>)?

标签 c# unit-testing testing nsubstitute

我正在使用 NSubstitute 来模拟我的一个类/接口(interface)。我的类实现的函数之一应该返回一个 List 类型的对象。

但是当我尝试使用 _mockedObject.MyFunction().Returns(myList) 时,它给我一个错误,提示我无法在我的列表和 Func 类型的对象之间进行转换。

我想我可以使用一些 ToString() 函数将我的列表作为字符串传递并将其转换回来?但这似乎不是特别干净,因为我期望从我的函数返回一个列表。

我从有关使用依赖注入(inject)进行单元测试的视频中看到,您可以使用 Moq (https://www.youtube.com/watch?v=DwbYxP-etMY) 从模拟对象返回对象。如果我无法使用 NSubstitute 返回对象,我正在考虑切换到它。

最佳答案

这是一个如何返回 List<string> 的例子来自 NSubstitute 模拟的对象:

using System.Collections.Generic;
using NSubstitute;
using Xunit;

public interface ISomeType {
    List<string> MyFunction();
}

public class SampleFixture {
    [Fact]
    public void ReturnList() {
        var _mockedObject = Substitute.For<ISomeType>();
        var myList = new List<string> { "hello", "world" };

        _mockedObject.MyFunction().Returns(myList);

        // Checking MyFunction() now stubbed correctly:
        Assert.Equal(new List<string> { "hello", "world" }, _mockedObject.MyFunction());
    }
}

您所描述的错误听起来涉及不同的类型。希望上面的示例将有助于显示问题的根源,但如果没有,请发布 _mockedObject 的示例界面和测试(如@jpgrassi 的评论中所建议)。

关于c# - 如何从带有 NSubstitute 的模拟对象返回一个对象(即 List<string>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383809/

相关文章:

c# - 一个语句中的 Linq 和 foreach 是否优于 2 个单独的显式语句?

c# - VS2010 的测试列表编辑器在 VS2012 中的功能(更新)

c# - 为什么 .Equal False 当我期望它是真的时?

java - Mockito 2 + Junit 5 AnnotationSupport.findAnnotation 上的 NoSuchMethodError

python - 使用来自第二个应用程序的模型测试 Django 应用程序

unit-testing - 单元测试 - 困惑

javascript - 参数检查库

networking - 如何在 Windows Phone 8 模拟器上测试网络超时异常

c# - 获取构造函数匹配参数

javascript - 如何对调用自身的函数进行单元测试