Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NSubstitute设置IEnumerable类的返回值_C#_Unit Testing_Nsubstitute - Fatal编程技术网

C# 如何使用NSubstitute设置IEnumerable类的返回值

C# 如何使用NSubstitute设置IEnumerable类的返回值,c#,unit-testing,nsubstitute,C#,Unit Testing,Nsubstitute,我有这个域名: public class ADomainClass { public int Id { get; set; } } public interface IMyClass : IEnumerable<ADomainClass> { } public class MyClass : IMyClass { public IEnumerator<ADomainClass> GetEnumerator() { IList&l

我有这个域名:

public class ADomainClass
{
    public int Id { get; set; }
}

public interface IMyClass : IEnumerable<ADomainClass>
{
}

public class MyClass : IMyClass
{
    public IEnumerator<ADomainClass> GetEnumerator()
    {
        IList<ADomainClass> list = new List<ADomainClass>();
        //list = GetData...();

        foreach (var item in list)
        {
            yield return item;
        }
    }

    ...
}

当它是一个可枚举类时,我不记得如何设置返回值。我以前解决过一次这个问题,但不记得在哪里使用过它。

您只需要告诉您的替代者从您的测试数据返回枚举数:

myclass.GetEnumerator().Returns(testdata.GetEnumerator());

我的问题是NSubstitute存储枚举的状态,因此如果在被测系统中使用枚举器两次,它将在第二次继续使用第二个元素。我使用下面的代码作为解决方法(使用lambda而不是返回枚举数,第1+2行仅用于演示)。我只是用Linq和foreach测试了一下

var bar = new List<string> { "a", "b", "c" };
var foo = Substitute.For<ICollection<string>>();
foo.GetEnumerator().Returns((ci) => { return bar.GetEnumerator(); });
var bar=新列表{“a”、“b”、“c”};
var foo=Substitute.For();
foo.GetEnumerator().Returns((ci)=>{return bar.GetEnumerator();});

为什么?NHibernate与NSubstitute有什么关系?如果您需要帮助,请创建一个新问题这是对原始问题的回答(关于如何替换IEnumerable)。我不是在问问题。这不会像预期的那样起作用。每次都需要使用lambda(请参见@TvdH answer)返回一个新的枚举数。否则,在多次调用之间不会重置枚举数。
myclass.GetEnumerator().Returns(testdata.GetEnumerator());
var bar = new List<string> { "a", "b", "c" };
var foo = Substitute.For<ICollection<string>>();
foo.GetEnumerator().Returns((ci) => { return bar.GetEnumerator(); });