面向初学者的C#测试:2024年从何入手

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么C#测试并不可怕,反而有益?

\n\n

如果你刚开始学习C#,并且听说过“优秀的开发者总是编写测试”,但完全不知道从何入手——那么你来对地方了。代码测试常常让新手感到害怕:似乎这是一件复杂的事情,需要深厚的架构知识和大量的配置。实际上,编写C#测试是一项可以在一个晚上掌握的技能,而它的好处将持续多年。

\n\n

想象一下,你组装了一个由数千个零件组成的复杂机械。你不会在未检查每个部件的情况下就全速启动它吧?程序也是如此:C#单元测试允许你单独检查代码的每一个“螺丝钉”,而不必等到整个系统在生产环境中崩溃。在本文中,我们将从零开始讲解C#测试:从选择框架到编写第一个有意义的测试。开始吧!

\n\n

C#测试从何开始:环境准备

\n\n

在编写代码之前,让我们确保你拥有所有必要的工具。进行C#测试,你需要:

\n
    \n
  • Visual Studio 2022(Community版免费)或JetBrains Rider(如果有许可证)。
  • \n
  • .NET SDK(版本6、7或8——任何LTS版本均可)。
  • \n
  • 对C#中OOP的基本理解:类、方法、接口。
  • \n
\n\n

当环境准备好后,创建一个新项目。我建议立即将代码分为两个项目:主项目(你的库或应用程序)和测试项目。在Visual Studio中,可以通过命令完成:File → New → Project → xUnit Test Project (.NET Core)或NUnit Test Project。但我们会更进一步,讲解这两种流行的工具。

\n\n

选择框架:NUnit vs xUnit

\n\n

在C#世界中,有两个主要的“玩家”用于编写模块测试:NUnit和xUnit。两者都运行良好,但有一些细微差别:

\n\n
    \n
  • NUnit——经典框架,源自Java(类似于JUnit)。具有属性[Test]、[SetUp]、[TearDown]。对初学者非常直观。
  • \n
  • xUnit——由ASP.NET创建者开发的现代框架。使用[Fact]和[Theory]。被认为更“干净”,并且与.NET Core集成更好。
  • \n
\n\n

对于初学者,我建议使用xUnit——它更简单,不需要多余的属性,更容易理解。但如果你的团队使用NUnit——也没关系,我们会讲解两种选项。

\n\n

第一个C#单元测试:编写代码

\n\n

假设我们有一个简单的计算器类:

\n\n
public class Calculator\n{\n    public int Add(int a, int b) => a + b;\n    \n    public int Divide(int a, int b)\n    {\n        if (b == 0)\n            throw new DivideByZeroException("不能除以零!");\n        return a / b;\n    }\n}
\n\n

现在为这个类编写测试。创建一个测试项目(xUnit)并添加对主项目的引用。

\n\n

xUnit测试示例

\n\n
using Xunit;\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoNumbers()\n    {\n        // Arrange\n        var calculator = new Calculator();\n        \n        // Act\n        var result = calculator.Add(3, 5);\n        \n        // Assert\n        Assert.Equal(8, result);\n    }\n    \n    [Fact]\n    public void Divide_ShouldThrowException_WhenDivideByZero()\n    {\n        var calculator = new Calculator();\n        \n        Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n    }\n}
\n\n

请注意Arrange-Act-Assert(AAA)结构。这是编写测试的黄金标准:首先准备数据,然后执行操作,最后验证结果。记住这个模式——它将帮助你避免混乱。

博客

书籍推荐