请考虑以下代码:

public static IEnumerable<object[]> TestData
{
    get
    {
        yield return new object[]
        {
            "hello",
            ImmutableList<string>.Empty.AddRange(
                new List<string>()
                {
                    "one",
                    "two"
                }
            )
        };
    }
}

[TestMethod]
[DynamicData(nameof(TestData))]
public void Sandbox(string myString, ImmutableList<string> myList)
{
    var sameListInstantiatedHere = ImmutableList<string>.Empty.AddRange(
        new List<string>()
        {
            "one",
            "two"
        }
    );

    sameListInstantiatedHere.Count.Should().Be(2);

    myString.Should().Be("hello");
    myList.Count.Should().Be(2);
}

我得到这个错误:

MyList.Count应为2,但发现为0(相差-2).

我真的不明白为什么myList只有零件物品.请注意,我甚至使用相同的代码在Sandbox方法中实例化它,以及sameListInstantiatedHere.Count.Should().Be(2);如何通过测试,而myList.Count.Should().Be(2);不能.

为什么会这样呢?我做错了什么?

推荐答案

确实非常意外的行为,可以通过应用此属性来修复:

[assembly: TestDataSourceDiscovery(TestDataSourceDiscoveryOption.DuringExecution)]

这种行为似乎是由MSTest发现机制更改introduced in 2.2.6引起的,该更改默认情况下(没有上面的属性)要求测试用例数据是可序列化的,这似乎是罪魁祸首(注意:它确实可以在List<>上工作,但不能在ImmutableList<>上工作).

另一种解决方法是切换到xUnit,开箱即用:

public class UnitTest
{
    public static IEnumerable<object[]> TestData
    {
        get
        {
            yield return new object[]
            {
                "hello",
                ImmutableList.Create("one", "two")
            };
        }
    }    

    [Theory]
    [MemberData(nameof(TestData))]
    public void Sandbox(string myString, ImmutableList<string> myList)
    {
        myString.Should().Be("hello");
        myList.Count.Should().Be(2);
    }
}

Csharp相关问答推荐

获取Windows和Linux上的下载文件夹

需要深入了解NpgSQL DateTimeOffset处理

在. NET Core 8 Web API中,当为服务总线使用通用消费者时,如何防止IServiceProvider被释放或空?"

编写DataAnnotations自定义验证器的多种方法

Entity Framework Core 8 dbcontext—无法以多对多关系添加某些行'

(乌龙)1&#比c#中的UL&#慢吗?

应用程序重新启动后,EFCore列表的BSON反序列化错误

UWP中的任务和界面

使用可信第三方的Iext8.Net pdf签名

每个http请求需要60秒,为什么?

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

如何使用.NET6WPF打印车票?

如何将FindAll()与Nuget包Interop.UIAutomationClient一起使用

如何在.NET MAUI中最大化GraphicsView的大小?

在C#中,当输入一个方法/局部函数时,我的IEnumerator被重置/重新创建.为什么?

用MongoDB c#驱动程序删除和返回嵌套数组中的文档

无法使用直接URL通过PictureBox.ImageLocation加载图像

如果所有";async任务方法()";调用都返回Task.FromResult()-是否同步执行?

无法将.Net Framework 4.8.1升级到.Net 7

如何在C#中用Serilog记录类路径、方法名和行编号