.NET Core - 测试库
在本章中,我们将测试我们的 StringLibrary,为此,我们需要重新安排我们的项目,以便我们可以遵循默认约定。
让我们打开 global.json 文件。
{ "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-preview2-003131" } }
在此文件的顶部,您将看到项目设置,它默认设置了一些文件夹,例如 src 和 test。
按照惯例,我们必须在这些文件夹中有项目,这是新的惯例,它将用作 .NET Core 的一部分。
在解决方案资源管理器中,您可以看到控制台项目和库项目都位于 src 文件夹中,而测试项目位于 test 文件夹中。
解决方案资源管理器中的项目结构并不代表项目在磁盘上的物理位置。 现在让我们打开 Solution 文件夹,您会看到 StringLibrary 项目不在 src 文件夹中。
您可以看到 src 和 test 文件夹都映射到 global.json 文件中指定的约定。但是,我们有一个不符合惯例的项目 StringLibrary。 现在让我们在 src 文件夹中添加 StringLibrary 项目。
在 src 文件夹中,我们有两个项目,我们需要解决这个问题,这样我们才能正常使用所有的项目。 让我们回到 Visual Studio 并右键单击 StringLibrary 项目并选择删除选项。 它不会删除它,但只会删除项目。
现在右键单击 src 文件夹并选择 Add → Existing Project…
浏览到现在位于 src 文件夹内的 StringLibrary 项目,选择 StringLibrary.csproj 文件并单击 Open。
我们现在必须从控制台应用程序的 project.json 文件中删除对 StringLibrary 的引用。
{ "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" }, "NuGet.CommandLine": "3.5.0", "System.Runtime.Serialization.Json": "4.0.3" }, "frameworks": { "netcoreapp1.0": { "dependencies": { }, "imports": "dnxcore50" } } }
保存更改,然后在您的控制台项目中再次添加对 StringLibrary 的引用。
{ "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" }, "NuGet.CommandLine": "3.5.0", "System.Runtime.Serialization.Json": "4.0.3" }, "frameworks": { "netcoreapp1.0": { "dependencies": { "StringLibrary": { "target": "project" } }, "imports": "dnxcore50" } } }
现在一切都应该再次运行,您可以构建 StringLibrary,然后构建 FirstApp(控制台项目)而不会出现任何错误。现在让我们使用 xunit 测试 StringLibrary 功能。 我们需要将 StringLibrary 的引用添加到我们的测试项目中。 右键单击 References of StringLibraryTests 项目并选择 Add Reference…
单击 OK,这会将 StringLibrary 的引用添加到我们的测试项目。 现在让我们替换 Tests.cs 文件中的以下代码。
using System; using Xunit; using StringLibrary; namespace Tests { public class Tests { [Fact] public void StartsWithUpperCaseTest() { string input = "Mark"; Assert.True(input.StartsWithUpper()); } [Fact] public void StartsWithLowerCaseTest() { string input = "mark"; Assert.True(input.StartsWithLower()); } [Fact] public void StartsWithNumberCaseTest() { string input = "123"; Assert.True(input.StartsWithNumber()); } } }
您可以看到我们有三个测试方法来测试 StringLibrary 的功能。 让我们单击 Run All 链接,您将在 Test Explorer 中看到以下输出。
您还可以从命令行运行测试。 让我们打开命令提示符并执行 dotnet test 命令。