是否可以将 xUnit 与 LINQPad 一起使用?
Is it possible to use xUnit with LINQPad?
是否可以将 xUnit 与 LINQPad 一起使用?
如果能够先为在 LINQPad 中设计的概念编写一些测试,那就太好了。这比添加另一个 ConsoleApp23423894238 更容易,只是为了能够快速编写一些单元测试。
我刚刚尝试打开一个试图加载 xunit
package 的 LINQPad 查询文件,但出现了多年来我使用 LINQPad 从未发生过的错误。所以我的回答是没有.
可能吗?有点。
这既不是 LINQPad 的主要用例,也不是单元测试的主要用例。
关于 LINQPad,您可以使用现有的测试运行器,但可能唯一可以与 LINQPad 集成的是控制台运行器。测试运行器不是一个简单的程序。试试 Xunit.Runner.LinqPad.
至于需要 "write some tests for concepts being designed",如果您发现单元测试工作流程没有足够的价值来创建项目并将其保存在源代码管理中,请考虑您可能没有充分利用单元测试工作流程。获得更多价值的一种方法是使用行为驱动开发 (BDD),如果您想用业务可读的语言编写需求,请尝试使用 SpecFlow 之类的东西。
是的,可以将 xUnit 与 LinqPad 一起使用。我已经更新了这个答案,为您提供最新信息,但我给出的原始答案也为您提供了一些关于 xUnit 用法的见解和 links,因此我保留它以供您参考。
更新: LinqPad 6 或 7 的最新版本(自 V 6.9.x 及更高版本,参见 6.9 Release Notes section) has now built-in XUnit support via the new menu item Query
/ Add XUnit Test Support
. This will add a query with required boilerplate code referenced via #load 所以你可以立即开始测试事实和理论。
您可以通过按 Alt+Shift+ 运行 示例测试方法T.
例如,将以下新理论添加到样板代码中(紧跟在 main 方法之后,将其放在 private::Tests
区域内):
#region private::Tests
[Theory]
[InlineData(1)]
[InlineData(3, 6)]
[InlineData(5, 7, 9)]
void OddNumbers(params int[] values)
{
static bool IsOdd(int value) => value % 2 == 1;
foreach (var value in values)
{
Assert.True(IsOdd(value), $"IsOdd({value}) is false");
}
}
#endregion
按Alt+Shift+T到运行所有测试和检查结果。
注意:它还会在您第一次添加 XUnit 测试支持时向您的查询目录添加一个文件 XUnit.linq
- 这是一个支持 xUnit 测试和你不应该碰它除非你确切地知道你在做什么。例如,您可以修改此文件以更改测试摘要的显示方式(例如,您可以将参数 Func<UserQuery.TestResultSummary, bool> filter = null
添加到方法 运行Tests 并在方法中添加 .Where(filter)
查询过滤器是否不为空。这允许您过滤测试摘要的结果)。
例如:RunTests(filter: f => f.MethodName.StartsWith("Unit"));
将仅在摘要中显示名称以“Unit”开头的测试。
可动态跳过的单元测试
您可以修改LinqPad 6提供的xunit
脚本来支持可跳过的单元测试(NUGET包XUnit.SkippableFact
,详细说明见link“动态跳过测试和理论”本回答结束)。
在 xunit 中进行以下更改:
函数运行测试 - 添加:
runner.OnTestSkipped = 信息 => AddTestResult(信息);
class TestResultSummary - 添加:
public bool Skipped() => _testInfo 是 Xunit.Runners.TestSkippedInfo;
class TestResultSummary / public 对象状态 - 添加:
_testInfo 是 Xunit.Runners.TestSkippedInfo 吗? Util.WithStyle(“跳过”,“颜色:橙色”):
这些更改将使 xunit
脚本能够在结果中显示跳过测试的时间。
要测试它,通过 F4 加载 NUGET 包 XUnit.SkippableFact
,然后添加测试框架,最后添加测试:
[SkippableFact]
void Test_Xunit3()
{
Skip.If(true, "skipping");
Assert.True(1 + 1 == 2);
}
[SkippableTheory]
[InlineData(1)]
[InlineData(2)]
void Test_Xunit4(int x)
{
Skip.If(x==2, "skipping");
Assert.True(1 + 1 == 2);
}
注意:这些更改也适用于普通 XUnit。因此,将更改添加到代码中并没有什么坏处。
现在,如果您愿意,请继续阅读原始答案(末尾有一些有用的提示):
两个答案为我指明了正确的方向,但描述还不够完整,所以我不得不试验一下。为了节省您的时间,我正在描述我所做的事情;我现在有 LinqPad 5 和 LinqPad 6(和 7)的工作解决方案。
LinqPad 5 - 适用于 .NET
根据 Tom 所写的内容,我能够在 LinqPad 5 (v5.42.01) 上使用它。
还需要一些其他步骤,这些步骤并不明显,也没有在接受的答案中进行解释,所以我将描述对我有帮助的内容。
首先,您需要使用付费版的 LinqPad,因为只有这样您才能加载 NUGET 包。
要在 LinqPad 中加载所需的包,请按 F4。查询属性对话框打开。在该对话框中,单击 添加 NUGET...。
NUGET 对话框打开。在 NUGET 对话框的中间,有一个搜索文本框。搜索 xUnit.Net
- 显示后,单击 添加到查询 ,等待它加载,然后单击 添加名称空间。 然后对 Xunit.Runner.LinqPad.
做同样的事情
然后关闭 NUGET 对话框,但保持查询属性打开。您需要转到 Advanced 选项卡:启用(打勾)“将所有非框架引用复制到单个本地文件夹。”现在您可以关闭 查询属性 对话框。
将以下示例导入查询编辑器(C# Program
模式):
void Main()
{
// Press F4, go to Advanced, then
// tick-mark "Copy all non-framework references to a single local folder"
var me = Assembly.GetExecutingAssembly();
var result = Xunit.Runner.LinqPad.XunitRunner.Run(me);
result.Dump("Xunit runner result");
}
/// <summary>
/// This test class is there for demo purpose, so developers can
/// see how to write test methods.
/// It also verifies that XUnit itself is functioning correctly.
/// </summary>
public class A_XUnitSelfTest
{
[InlineData(2)]
[InlineData(3)]
[Theory]
public void Test_Theory(int a)
{
Assert.True(a == 2 || a == 3); // succeeds
}
[Fact]
public void Test_Fact()
{
Assert.False(1 == 0); // succeeds
}
}
运行 它,你会看到测试的输出 运行ner.
Running 3 of 3 tests...
Finished: 3 tests in 0,003s (0 failed, 0 skipped)
通过将 Test_Fact()
中的断言更改为 Assert.False(1 == 1);
,然后再次 运行 来修改测试以查看测试失败时的情况。这次应该显示:
Running 3 of 3 tests...
[FAIL] UserQuery+A_XUnitSelfTest.Test_Fact: Assert.False() Failure
Expected: False
Actual: True
at Xunit.Assert.False(Nullable`1 condition, String userMessage)
at Xunit.Assert.False(Boolean condition)
at UserQuery.A_XUnitSelfTest.Test_Fact() in C:\Users...\AppData\Local\Temp\LINQPad5_oyxxqxbu\query_mxsmky.cs:line 62
Finished: 3 tests in 0,005s (1 failed, 0 skipped)
LinqPad 6 - 适用于 .NET Core
LinqPad 6 不同,因为它基于 .NET Core,因此需要不同的库。
从这里开始:
void Main()
{
// Press F4, go to Advanced, then
// tick-mark "Copy all non-framework references to a single local folder"
var me = Assembly.GetExecutingAssembly();
var result = Xunit.Runner.LinqPad.XunitRunner.Run(me);
result.Dump("Xunit runner result");
}
/// <summary>
/// This test class is there for demo purpose, so developers can
/// see how to write test methods.
/// It also verifies that XUnit itself is functioning correctly.
/// </summary>
public class A_XUnitSelfTest
{
[InlineData(2)]
[InlineData(3)]
[Theory]
public void Test_Theory(int a)
{
Assert.True(a == 2 || a == 3); // succeeds
}
[Fact]
public void Test_Fact()
{
Assert.False(1 == 0); // succeeds
}
}
然后通过 F4 对话框添加 xUnit.net
、xUnit.net [Core Unit Testing Framework]
和 xUnit.net [Runner Utility]
及其所有名称空间(详情请参阅 LinqPad 5 部分)和最后把XUnit运行ner源码复制到上面xUnit测试例子的最后:
在 F4 对话框的“高级”选项卡中启用“将所有 nuget 程序集复制到一个本地文件夹”...这应该足够了,但不是这样阅读的:
如果您尝试,它会在源代码中抛出异常 InvalidOperationException("Please enable the shadow folder option for none-framework references (F4 -> Advanced).")。
现在我查看了 XUnit 运行ner, 并发现如果您注释掉 2 行代码那么 运行ning 没问题:
原代码(位于方法GetTargetAssemblyFilename
):
if (shadowFolder != xunitFolder
|| Directory.GetFiles(shadowFolder, "xunit.execution.*.dll").Length == 0)
{
throw new InvalidOperationException("Please enable the shadow folder option ...");
}
// ...
var targetAssembly = Path.Combine(shadowFolder, Path.GetFileName(assemblyFilename));
//Console.WriteLine($"Copy \"{ assemblyFilename }\" -> \"{ targetAssembly }\"");
File.Copy(assemblyFilename, targetAssembly, true);
注释行
// ...
// throw new InvalidOperationException("Please enable the shadow folder option ...");
// ...
// File.Copy(assemblyFilename, targetAssembly, true);
大功告成! (使用LinqPad 6 v6.8.3版本测试,X64版本)
提示:
提示 1:
您可以按照说明将 xUnit 运行ner 附加到您的代码中,但在 LinqPad 6 中有一种更优雅的方法:
将仅包含 xUnit.Runner 源代码的副本保存在与单元测试文件相同的路径中,文件名为 xUnit.Runner.LinqPad6.linq
。
然后,将以下内容添加到测试代码的顶部:
现在您已经清理了您的代码!每次创建新测试时,请记住添加 #load
命令。
提示2:
为了能够静态地跳过事实,将以下2个属性添加到测试代码中运行ner:
/// <summary>
/// Skip a Fact (you can override it by setting OverrideSkip=true)
/// </summary>
public class SkipFactAttribute : FactAttribute
{
/// <summary>
/// Override SkipFact: Set OverrideSkip=true to run even skipped tests
/// </summary>
public static bool OverrideSkip = false; // set to true to ignore skip
/// <summary>
/// Constructor. Used to set skip condition.
/// </summary>
public SkipFactAttribute()
{
if (!OverrideSkip) Skip = "Skipped Fact";
}
}
/// <summary>
/// Skip a Theory (you can override it by setting OverrideSkip=true)
/// </summary>
public class SkipTheoryAttribute : TheoryAttribute
{
/// <summary>
/// Override SkipTheory: Set OverrideSkip=true to run even skipped tests
/// </summary>
public static bool OverrideSkip = false; // set to true to ignore skip
/// <summary>
/// Constructor. Used to set skip condition.
/// </summary>
public SkipTheoryAttribute()
{
if (!OverrideSkip) Skip = "Skipped Theory";
}
}
如果您想跳过测试,这很有用。要跳过测试,只需将 [Fact]
替换为 [SkipFact]
或将 [Theory]
替换为 [SkipTheory]
。
如果您正忙于编写测试并且只想测试那个测试,请将所有属性设置为 [SkipFact]
或类似 [SkipTheory]
,除了您正在编写的单个测试。
然后,为了不时再次快速 运行 所有测试 - 无需更改每个属性 - 将以下内容添加到测试套件的初始化部分(参见 global setup for startup and teardown):
public class TestsFixture : IDisposable
{
public TestsFixture() // running once before the tests
{
// true: Ignore Skip and run all tests, false: Skip is effective
SkipFactAttribute.OverrideSkip = true;
SkipTheoryAttribute.OverrideSkip = true;
}
public void Dispose() // running once, after the tests
{
// teardown code
}
}
如果完成,请恢复 [Fact]
/[Theory]
属性并将 .OverrideSkip
变量设置回 false
。
注意: 如果您想跳过基于 运行 时间条件的事实, 看看 .
关于单元测试的更多信息
有关使用 xUnit 进行单元测试的一些高级主题,我建议阅读:
- xunit tests in net core
- global setup for startup and teardown
- shared context
- running tests in parallel
- running tests in prioritized, specified order
- configuring with json
- configuring with xml
- skipping Test and Theory // 描述也适用于 TheoryAttribute
- xUnit Theory: Working With InlineData, MemberData, ClassData
如果你想和Visual Studio一起使用,你可以找到信息here。
感谢 asherber,xunit 现在可以与 linqpad6 (netcore) 一起使用了。
https://github.com/asherber/Xunit.Runner.LinqPad/blob/master/Xunit.Runner.LinqPad/XunitRunner.cs
在查询属性中很重要,选中“将所有 nuget 程序集复制到一个本地文件夹”,否则,您将遇到以下错误“InvalidOperationException:请为 none-framework 启用影子文件夹选项参考文献
是否可以将 xUnit 与 LINQPad 一起使用?
如果能够先为在 LINQPad 中设计的概念编写一些测试,那就太好了。这比添加另一个 ConsoleApp23423894238 更容易,只是为了能够快速编写一些单元测试。
我刚刚尝试打开一个试图加载 xunit
package 的 LINQPad 查询文件,但出现了多年来我使用 LINQPad 从未发生过的错误。所以我的回答是没有.
可能吗?有点。
这既不是 LINQPad 的主要用例,也不是单元测试的主要用例。
关于 LINQPad,您可以使用现有的测试运行器,但可能唯一可以与 LINQPad 集成的是控制台运行器。测试运行器不是一个简单的程序。试试 Xunit.Runner.LinqPad.
至于需要 "write some tests for concepts being designed",如果您发现单元测试工作流程没有足够的价值来创建项目并将其保存在源代码管理中,请考虑您可能没有充分利用单元测试工作流程。获得更多价值的一种方法是使用行为驱动开发 (BDD),如果您想用业务可读的语言编写需求,请尝试使用 SpecFlow 之类的东西。
是的,可以将 xUnit 与 LinqPad 一起使用。我已经更新了这个答案,为您提供最新信息,但我给出的原始答案也为您提供了一些关于 xUnit 用法的见解和 links,因此我保留它以供您参考。
更新: LinqPad 6 或 7 的最新版本(自 V 6.9.x 及更高版本,参见 6.9 Release Notes section) has now built-in XUnit support via the new menu item Query
/ Add XUnit Test Support
. This will add a query with required boilerplate code referenced via #load 所以你可以立即开始测试事实和理论。
您可以通过按 Alt+Shift+ 运行 示例测试方法T.
例如,将以下新理论添加到样板代码中(紧跟在 main 方法之后,将其放在 private::Tests
区域内):
#region private::Tests
[Theory]
[InlineData(1)]
[InlineData(3, 6)]
[InlineData(5, 7, 9)]
void OddNumbers(params int[] values)
{
static bool IsOdd(int value) => value % 2 == 1;
foreach (var value in values)
{
Assert.True(IsOdd(value), $"IsOdd({value}) is false");
}
}
#endregion
按Alt+Shift+T到运行所有测试和检查结果。
注意:它还会在您第一次添加 XUnit 测试支持时向您的查询目录添加一个文件 XUnit.linq
- 这是一个支持 xUnit 测试和你不应该碰它除非你确切地知道你在做什么。例如,您可以修改此文件以更改测试摘要的显示方式(例如,您可以将参数 Func<UserQuery.TestResultSummary, bool> filter = null
添加到方法 运行Tests 并在方法中添加 .Where(filter)
查询过滤器是否不为空。这允许您过滤测试摘要的结果)。
例如:RunTests(filter: f => f.MethodName.StartsWith("Unit"));
将仅在摘要中显示名称以“Unit”开头的测试。
可动态跳过的单元测试
您可以修改LinqPad 6提供的xunit
脚本来支持可跳过的单元测试(NUGET包XUnit.SkippableFact
,详细说明见link“动态跳过测试和理论”本回答结束)。
在 xunit 中进行以下更改:
函数运行测试 - 添加: runner.OnTestSkipped = 信息 => AddTestResult(信息);
class TestResultSummary - 添加: public bool Skipped() => _testInfo 是 Xunit.Runners.TestSkippedInfo;
class TestResultSummary / public 对象状态 - 添加: _testInfo 是 Xunit.Runners.TestSkippedInfo 吗? Util.WithStyle(“跳过”,“颜色:橙色”):
这些更改将使 xunit
脚本能够在结果中显示跳过测试的时间。
要测试它,通过 F4 加载 NUGET 包 XUnit.SkippableFact
,然后添加测试框架,最后添加测试:
[SkippableFact]
void Test_Xunit3()
{
Skip.If(true, "skipping");
Assert.True(1 + 1 == 2);
}
[SkippableTheory]
[InlineData(1)]
[InlineData(2)]
void Test_Xunit4(int x)
{
Skip.If(x==2, "skipping");
Assert.True(1 + 1 == 2);
}
注意:这些更改也适用于普通 XUnit。因此,将更改添加到代码中并没有什么坏处。
现在,如果您愿意,请继续阅读原始答案(末尾有一些有用的提示):
两个答案为我指明了正确的方向,但描述还不够完整,所以我不得不试验一下。为了节省您的时间,我正在描述我所做的事情;我现在有 LinqPad 5 和 LinqPad 6(和 7)的工作解决方案。
LinqPad 5 - 适用于 .NET
根据 Tom 所写的内容,我能够在 LinqPad 5 (v5.42.01) 上使用它。
还需要一些其他步骤,这些步骤并不明显,也没有在接受的答案中进行解释,所以我将描述对我有帮助的内容。
首先,您需要使用付费版的 LinqPad,因为只有这样您才能加载 NUGET 包。
要在 LinqPad 中加载所需的包,请按 F4。查询属性对话框打开。在该对话框中,单击 添加 NUGET...。
NUGET 对话框打开。在 NUGET 对话框的中间,有一个搜索文本框。搜索 xUnit.Net
- 显示后,单击 添加到查询 ,等待它加载,然后单击 添加名称空间。 然后对 Xunit.Runner.LinqPad.
然后关闭 NUGET 对话框,但保持查询属性打开。您需要转到 Advanced 选项卡:启用(打勾)“将所有非框架引用复制到单个本地文件夹。”现在您可以关闭 查询属性 对话框。
将以下示例导入查询编辑器(C# Program
模式):
void Main()
{
// Press F4, go to Advanced, then
// tick-mark "Copy all non-framework references to a single local folder"
var me = Assembly.GetExecutingAssembly();
var result = Xunit.Runner.LinqPad.XunitRunner.Run(me);
result.Dump("Xunit runner result");
}
/// <summary>
/// This test class is there for demo purpose, so developers can
/// see how to write test methods.
/// It also verifies that XUnit itself is functioning correctly.
/// </summary>
public class A_XUnitSelfTest
{
[InlineData(2)]
[InlineData(3)]
[Theory]
public void Test_Theory(int a)
{
Assert.True(a == 2 || a == 3); // succeeds
}
[Fact]
public void Test_Fact()
{
Assert.False(1 == 0); // succeeds
}
}
运行 它,你会看到测试的输出 运行ner.
Running 3 of 3 tests...
Finished: 3 tests in 0,003s (0 failed, 0 skipped)
通过将 Test_Fact()
中的断言更改为 Assert.False(1 == 1);
,然后再次 运行 来修改测试以查看测试失败时的情况。这次应该显示:
Running 3 of 3 tests...
[FAIL] UserQuery+A_XUnitSelfTest.Test_Fact: Assert.False() Failure
Expected: False
Actual: True
at Xunit.Assert.False(Nullable`1 condition, String userMessage)
at Xunit.Assert.False(Boolean condition)
at UserQuery.A_XUnitSelfTest.Test_Fact() in C:\Users...\AppData\Local\Temp\LINQPad5_oyxxqxbu\query_mxsmky.cs:line 62
Finished: 3 tests in 0,005s (1 failed, 0 skipped)
LinqPad 6 - 适用于 .NET Core
LinqPad 6 不同,因为它基于 .NET Core,因此需要不同的库。
从这里开始:
void Main()
{
// Press F4, go to Advanced, then
// tick-mark "Copy all non-framework references to a single local folder"
var me = Assembly.GetExecutingAssembly();
var result = Xunit.Runner.LinqPad.XunitRunner.Run(me);
result.Dump("Xunit runner result");
}
/// <summary>
/// This test class is there for demo purpose, so developers can
/// see how to write test methods.
/// It also verifies that XUnit itself is functioning correctly.
/// </summary>
public class A_XUnitSelfTest
{
[InlineData(2)]
[InlineData(3)]
[Theory]
public void Test_Theory(int a)
{
Assert.True(a == 2 || a == 3); // succeeds
}
[Fact]
public void Test_Fact()
{
Assert.False(1 == 0); // succeeds
}
}
然后通过 F4 对话框添加 xUnit.net
、xUnit.net [Core Unit Testing Framework]
和 xUnit.net [Runner Utility]
及其所有名称空间(详情请参阅 LinqPad 5 部分)和最后把XUnit运行ner源码
在 F4 对话框的“高级”选项卡中启用“将所有 nuget 程序集复制到一个本地文件夹”...这应该足够了,但不是这样阅读的:
如果您尝试,它会在源代码中抛出异常 InvalidOperationException("Please enable the shadow folder option for none-framework references (F4 -> Advanced).")。
现在我查看了 XUnit 运行ner, 并发现如果您注释掉 2 行代码那么 运行ning 没问题:
原代码(位于方法GetTargetAssemblyFilename
):
if (shadowFolder != xunitFolder
|| Directory.GetFiles(shadowFolder, "xunit.execution.*.dll").Length == 0)
{
throw new InvalidOperationException("Please enable the shadow folder option ...");
}
// ...
var targetAssembly = Path.Combine(shadowFolder, Path.GetFileName(assemblyFilename));
//Console.WriteLine($"Copy \"{ assemblyFilename }\" -> \"{ targetAssembly }\"");
File.Copy(assemblyFilename, targetAssembly, true);
注释行
// ...
// throw new InvalidOperationException("Please enable the shadow folder option ...");
// ...
// File.Copy(assemblyFilename, targetAssembly, true);
大功告成! (使用LinqPad 6 v6.8.3版本测试,X64版本)
提示:
提示 1:
您可以按照说明将 xUnit 运行ner 附加到您的代码中,但在 LinqPad 6 中有一种更优雅的方法:
将仅包含 xUnit.Runner 源代码的副本保存在与单元测试文件相同的路径中,文件名为 xUnit.Runner.LinqPad6.linq
。
然后,将以下内容添加到测试代码的顶部:
现在您已经清理了您的代码!每次创建新测试时,请记住添加 #load
命令。
提示2:
为了能够静态地跳过事实,将以下2个属性添加到测试代码中运行ner:
/// <summary>
/// Skip a Fact (you can override it by setting OverrideSkip=true)
/// </summary>
public class SkipFactAttribute : FactAttribute
{
/// <summary>
/// Override SkipFact: Set OverrideSkip=true to run even skipped tests
/// </summary>
public static bool OverrideSkip = false; // set to true to ignore skip
/// <summary>
/// Constructor. Used to set skip condition.
/// </summary>
public SkipFactAttribute()
{
if (!OverrideSkip) Skip = "Skipped Fact";
}
}
/// <summary>
/// Skip a Theory (you can override it by setting OverrideSkip=true)
/// </summary>
public class SkipTheoryAttribute : TheoryAttribute
{
/// <summary>
/// Override SkipTheory: Set OverrideSkip=true to run even skipped tests
/// </summary>
public static bool OverrideSkip = false; // set to true to ignore skip
/// <summary>
/// Constructor. Used to set skip condition.
/// </summary>
public SkipTheoryAttribute()
{
if (!OverrideSkip) Skip = "Skipped Theory";
}
}
如果您想跳过测试,这很有用。要跳过测试,只需将 [Fact]
替换为 [SkipFact]
或将 [Theory]
替换为 [SkipTheory]
。
如果您正忙于编写测试并且只想测试那个测试,请将所有属性设置为 [SkipFact]
或类似 [SkipTheory]
,除了您正在编写的单个测试。
然后,为了不时再次快速 运行 所有测试 - 无需更改每个属性 - 将以下内容添加到测试套件的初始化部分(参见 global setup for startup and teardown):
public class TestsFixture : IDisposable
{
public TestsFixture() // running once before the tests
{
// true: Ignore Skip and run all tests, false: Skip is effective
SkipFactAttribute.OverrideSkip = true;
SkipTheoryAttribute.OverrideSkip = true;
}
public void Dispose() // running once, after the tests
{
// teardown code
}
}
如果完成,请恢复 [Fact]
/[Theory]
属性并将 .OverrideSkip
变量设置回 false
。
注意: 如果您想跳过基于 运行 时间条件的事实, 看看
关于单元测试的更多信息
有关使用 xUnit 进行单元测试的一些高级主题,我建议阅读:
- xunit tests in net core
- global setup for startup and teardown
- shared context
- running tests in parallel
- running tests in prioritized, specified order
- configuring with json
- configuring with xml
- skipping Test and Theory // 描述也适用于 TheoryAttribute
- xUnit Theory: Working With InlineData, MemberData, ClassData
如果你想和Visual Studio一起使用,你可以找到信息here。
感谢 asherber,xunit 现在可以与 linqpad6 (netcore) 一起使用了。
https://github.com/asherber/Xunit.Runner.LinqPad/blob/master/Xunit.Runner.LinqPad/XunitRunner.cs
在查询属性中很重要,选中“将所有 nuget 程序集复制到一个本地文件夹”,否则,您将遇到以下错误“InvalidOperationException:请为 none-framework 启用影子文件夹选项参考文献