xUnit InlineData 意外结果

xUnit InlineData unexpected result

我有以下内容 class 我正在尝试进行单元测试(示例 class):

using System;

public class Checker
{
    public bool Check<T>(T valueA, T valueB)
    {
        if (typeof(T) != typeof(string))
            throw new NotSupportedException();
        
        return true;
    }
}

当我正确地调用 new Checker().Check(null, "test") 时 returns true 但是当我将 xUnit 与 InlineData 一起使用时,如下所示:

[Theory]
[InlineData(null, "test")]
[InlineData("test", null)]
public void TestChecker<T>(T valueA, T valueB)
{
   var checker = new Checker();

   Assert.True(checker.Check(valueA, valueB));
}

两个测试都应该通过,但它们没有 - 相反,第一个测试抛出 NotSupportedException 异常。根据测试资源管理器...这是在第一次测试中通过的:

Namespace.TestChecker<Object>(valueA: null, valueB: "test") - 为什么 T 类型是 object 而不是 string ,当我直接调用它时如何防止这种情况发生?

好的,实际上有一种更好的方法可以在保持 InlineData:

的同时实现这一目标
[Theory]
[InlineData(null, "test")]
[InlineData("test", null)]
public void TestChecker<T>(T valueA, T valueB)
{
   var checker = new Checker();

   Assert.True(checker.Check((dynamic) valueA, (dynamic) valueB));
}

尽管这不是最漂亮的,因为 Test Explorer 仍会显示 TestChecker<Object>(valueA: null, valueB: "test") 但它有效...