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")
但它有效...
我有以下内容 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")
但它有效...