编程语言
首页 > 编程语言> > 如何应用dotnet test 在进行 C# 单元测试方程式的应用原理

如何应用dotnet test 在进行 C# 单元测试方程式的应用原理

作者:互联网

创建解决方案

在本部分中,将创建包含源和测试项目的解决方案。 已完成的解决方案具有以下目录结构:

 
/unit-testing-using-dotnet-test
    unit-testing-using-dotnet-test.sln
    /PrimeService
        PrimeService.cs
        PrimeService.csproj
    /PrimeService.Tests
        PrimeService_IsPrimeShould.cs
        PrimeServiceTests.csproj

以下说明提供了创建测试解决方案的步骤。 有关通过一个步骤创建测试解决方案的说明,请参阅用于创建测试解决方案的命令

用于创建解决方案的命令

本部分汇总了上一部分中的所有命令。 如果已完成上一部分中的步骤,请跳过本部分。

以下命令用于在 Windows 计算机上创建测试解决方案。 对于 macOS 和 Unix,请将 ren 命令更新为 OS 版本的 ren 以重命名文件:

.NET Core CLI
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.cs PrimeService.cs
dotnet sln add ./PrimeService/PrimeService.csproj
dotnet new xunit -o PrimeService.Tests
dotnet add ./PrimeService.Tests/PrimeService.Tests.csproj reference ./PrimeService/PrimeService.csproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj

请按照上一部分中的“将 PrimeService.cs 中的代码替换为以下代码”的说明进行操作。

创建测试

测试驱动开发 (TDD) 中的一种常用方法是在实现目标代码之前编写测试。 本教程使用 TDD 方法。 IsPrime 方法可调用,但未实现。 对 IsPrime 的测试调用失败。 对于 TDD,会编写已知失败的测试。 更新目标代码使测试通过。 你可以重复使用此方法,编写失败的测试,然后更新目标代码使测试通过。

更新 PrimeService.Tests 项目:

C#
using Xunit;
using Prime.Services;

namespace Prime.UnitTests.Services
{
    public class PrimeService_IsPrimeShould
    {
        [Fact]
        public void IsPrime_InputIs1_ReturnFalse()
        {
            var primeService = new PrimeService();
            bool result = primeService.IsPrime(1);

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

[Fact] 属性声明由测试运行程序运行的测试方法。 从 PrimeService.Tests 文件夹运行 dotnet test。 dotnet test 命令生成两个项目并运行测试。 xUnit 测试运行程序包含要运行测试的程序入口点。 dotnet test 使用单元测试项目启动测试运行程序。

测试失败,因为尚未实现 IsPrime。 使用 TDD 方法,只需编写足够的代码即可使此测试通过。 使用以下代码更新 IsPrime

C#
public bool IsPrime(int candidate)
{
    if (candidate == 1)
    {
        return false;
    }
    throw new NotImplementedException("Not fully implemented.");
}

运行 dotnet test。 测试通过。

添加更多测试

为 0 和 -1 添加素数测试。 你可以复制上述测试并将以下代码更改为使用 0 和 -1:

C#
var primeService = new PrimeService();
bool result = primeService.IsPrime(1);

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

仅当参数更改代码重复和测试膨胀中的结果时复制测试代码。 以下 xUnit 属性允许编写类似测试套件:

可以不使用上述 xUnit 属性创建新测试,而是用来创建单个索引。 替换以下代码:

C#
[Fact]
public void IsPrime_InputIs1_ReturnFalse()
{
    var primeService = new PrimeService();
    bool result = primeService.IsPrime(1);

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

替换为以下代码:

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

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

在前面的代码中,[Theory] 和 [InlineData] 允许测试多个小于 2 的值。 2 是最小的素数。

运行 dotnet test,其中两个测试失败。 若要使所有测试通过,请使用以下代码更新 IsPrime 方法:

C#
public bool IsPrime(int candidate)
{
    if (candidate < 2)
    {
        return false;
    }
    throw new NotImplementedException("Not fully implemented.");
}

遵循 TDD 方法,添加更多失败的测试,然后更新目标代码。 请参阅已完成的测试版本库的完整实现

已完成的 IsPrime 方法不是用于测试素性的有效算法。

其他资源

标签:Tests,C#,PrimeService,单元测试,dotnet,测试,test,new,IsPrime
来源: https://www.cnblogs.com/Aini999/p/13936668.html