推荐阅读
  • .NET Core 和 .NET Standard 中的单元测试

    备注 ASP.NET 团队遵循这些约定帮助开发人员为测试类和方法提供合适的名称。

  • 在 Visual Studio 中创建 Hello World 应用

    本文内容 本教程演示如何在 Visual Studio 2019 中创建和运行 .NET Core 控制台应用程序。先决条件安装了具有“.NET Core 跨平台开发”工作负载的 Visual Studio 2019 版本 16.6 或更高版本。 选择此工

  • dotnet new

    备注 某些 shell 将 # 解释为特殊字符。 在这些情况下,请将语言参数值括在引号中。 例如 dotnet new console -lang "F#"。

  • .NET Core 入门

    本文内容 本文提供 .NET Core 入门的相关信息。 可在 Windows、Linux 和 macOS 上安装 .NET Core。 你可在最喜欢的文本编辑器中编写代码并生成跨平台的库和应用程序。如果不确定 .NET Core 是什么或其与其他 .NET

  • 开始使用 CLI

    本文内容 本教程演示如何使用 Visual Studio Code 和 .NET Core CLI 创建并运行 .NET Core 控制台应用程序。 项目任务(例如创建、编译和运行项目)通过使用 .NET Core CLI 来完成。 你可以遵循本教程中的步骤使用

  • .NET Core 发布应用

    备注 可以通过启用全局固定模式来降低部署的总大小 。 此模式适用于不具有全局意识且可以使用固定区域性的格式约定、大小写约定以及字符串比较和排序顺序的应用程序。 有关全局固定模式及其启用方式的详细信息,请参阅 .NET Core 全局固定模式。

  • 测试 ASP.NET Core MVC 应用

    “如果你不喜欢对产品进行单元测试,很可能你的客户也不喜欢这样做。” _- 匿名-

  • 从 .NET Framework 移植到 .NET Core

    本文内容 你可能有些代码当前正在 .NET Framework 上运行,但你想将这些代码移植到 .NET Core。 本文提供以下内容:移植过程概述。在将代码移植到 .NET Core 时,可能会发现一系列有用的工具。移植过程概述针对多个项目从 .N

  • 概述 ASP.NET Core 概述

    本文内容 作者:Daniel Roth、Rick Anderson 和 Shaun LuttinASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。 使用 ASP.NET Core,您可以:生成 W

  • 开始使用 创建第一个实时 Web 应用

    本文内容 本教程介绍使用 SignalR 生成实时应用的基础知识。 您将学习如何:创建 Web 项目。添加 SignalR 客户端库。创建 SignalR 中心。配置项目以使用 SignalR。添加可将消息从任何客户端发送到所有连接客户端的代码。

通过 NUnit 进行单元测试

本教程介绍分步构建示例解决方案的交互式体验,以了解单元测试概念。 如果希望使用预构建解决方案学习本教程,请在开始前查看或下载示例代码 有关下载说明,请参阅示例和教程

本文介绍如何测试 .NET Core 项目。 如果要测试 ASP.NET Core 项目,请参阅 ASP.NET Core 中的集成测试

系统必备

  • .NET Core 2.1 SDK 或更高版本。
  • 按需选择的文本编辑器或代码编辑器。

创建源项目

打开 shell 窗口。 创建一个名为 unit-testing-using-nunit 的目录,以保留该解决方案。 在此新目录中,运行以下命令,为类库和测试项目创建新的解决方案文件:

dotnet new sln

接下来,创建 PrimeService 目录。 下图显示了当前的目录和文件结构:

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService

将 PrimeService 作为当前目录,并运行以下命令以创建源项目:

dotnet new classlib

Class1.cs 重命名为 PrimeService.cs 创建 PrimeService 类的失败实现:

using System;

namespace Prime.Services
{
    public class PrimeService
    {
        public bool IsPrime(int candidate)
        {
            throw new NotImplementedException("Please create a test first.");
        }
    }
}

将目录更改回 unit-testing-using-nunit 目录。 运行以下命令,向解决方案添加类库项目:

dotnet sln add PrimeService/PrimeService.csproj

创建测试项目

接下来,创建 PrimeService.Tests 目录。 下图显示了它的目录结构:

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService
        Source Files
        PrimeService.csproj
    /PrimeService.Tests

将 PrimeService.Tests 目录作为当前目录,并使用以下命令创建一个新项目:

dotnet new nunit

dotnet new 命令可创建一个将 NUnit 用作测试库的测试项目。 生成的模板在 PrimeService.Tests.csproj 文件中配置测试运行程序:

<ItemGroup>
  <PackageReference Include="nunit" Version="3.12.0" />
  <PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
</ItemGroup>

测试项目需要其他包创建和运行单元测试。 在上一步中,dotnet new 已添加 Microsoft 测试 SDK、NUnit 测试框架和 NUnit 测试适配器。 现在,将 PrimeService 类库作为另一个依赖项添加到项目中。 使用 dotnet add reference 命令:

dotnet add reference ../PrimeService/PrimeService.csproj

可以在 GitHub 上的示例存储库中看到整个文件。

下图显示了最终的解决方案布局:

/unit-testing-using-nunit
    unit-testing-using-nunit.sln
    /PrimeService
        Source Files
        PrimeService.csproj
    /PrimeService.Tests
        Test Source Files
        PrimeService.Tests.csproj

在 unit-testing-using-nunit 目录中执行以下命令:

dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj

创建第一个测试

编写一个失败测试,使其通过,然后重复此过程。 在 PrimeService.Tests 目录中,将 UnitTest1.cs 文件重命名为 PrimeService_IsPrimeShould.cs ,并将其整个内容替换为以下代码:

using NUnit.Framework;
using Prime.Services;

namespace Prime.UnitTests.Services
{
    [TestFixture]
    public class PrimeService_IsPrimeShould
    {
        private PrimeService _primeService;

        [SetUp]
        public void SetUp()
        {
            _primeService = new PrimeService();
        }

        [Test]
        public void IsPrime_InputIs1_ReturnFalse()
        {
            var result = _primeService.IsPrime(1);

            Assert.IsFalse(result, "1 should not be prime");
        }

[TestFixture] 属性表示包含单元测试的类。 [Test] 属性指示方法是测试方法。

保存此文件并执行 dotnet test 以构建测试和类库,然后运行测试。 NUnit 测试运行程序包含要运行测试的程序入口点。 dotnet test 使用已创建的单元测试项目启动测试运行程序。

测试失败。 尚未创建实现。 在起作用的 PrimeService 类中编写最简单的代码,使此测试通过:

public bool IsPrime(int candidate)
{
    if (candidate == 1)
    {
        return false;
    }
    throw new NotImplementedException("Please create a test first.");
}

在 unit-testing-using-nunit 目录中再次运行 dotnet test dotnet test 命令构建 PrimeService 项目,然后构建 PrimeService.Tests 项目。 构建这两个项目后,该命令将运行此单项测试。 测试通过。

添加更多功能

你已经通过了一个测试,现在可以编写更多测试。 质数有其他几种简单情况:0,-1。 可以添加具有 [Test] 属性的新测试,但这很快就会变得枯燥乏味。 还有其他 NUnit 属性可用于编写一套类似的测试。 [TestCase] 属性用于创建一套可执行相同代码但具有不同输入参数的测试。 可以使用 [TestCase] 属性来指定这些输入的值。

无需创建新的测试,而是应用此属性来创建数据驱动的单个测试。 数据驱动的测试方法用于测试多个小于 2(即最小质数)的值:

[TestCase(-1)]
[TestCase(0)]
[TestCase(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
    var result = _primeService.IsPrime(value);

    Assert.IsFalse(result, $"{value} should not be prime");
}

运行 dotnet test,两项测试均失败。 若要使所有测试通过,可以在 PrimeService.cs 文件中更改 Main 方法开头的 if 子句:

if (candidate < 2)

通过在主库中添加更多测试、理论和代码继续循环访问。 你将拥有已完成的测试版本库的完整实现

你已生成一个小型库和该库的一组单元测试。 你已将解决方案结构化,使添加新包和新测试成为了正常工作流的一部分。 你已将多数的时间和精力集中在解决应用程序的目标上。

关于我们 免责声明 联系我们
Copyright © 2021 爱学习网 浙ICP备18049359号 网站地图 Google地图