译者|李睿评论|有一些开源框架可用于单元测试.NET应用程序,即NUnit和xUnit.Net。开发人员应始终在软件开发工作流程中包括单元测试,以减少或消除应用程序中的错误。还可以利用ArchUnit或NetArchTest等框架来编写有助于执行架构规则的单元测试。受基于Java的ArchUnit的启发,BenMorris的NetArchTest是一个简单的框架,可用于在.NETFramework或.NETCore以及.NET6项目中实施架构规则。本文讨论了在C#语言中强制执行体系结构规则的重要性,以及如何使用NetArchTest来实现这一点。要使用本文提供的代码示例,您需要在系统中安装VisualStudio2022。1.执行架构规则的需要有大量静态代码分析框架和工具可用于检查.NET、.NETCore或.NET6代码质量。对于初学者来说,SonarQube和NDepend是两个流行的工具。静态代码分析也作为VisualStudio的一部分提供。然而,这些工具很少能帮助开发人员保留架构设计模式或在源代码中强制执行架构规则。如果不定期验证或执行这些规则,其应用程序的设计或架构将随着时间的推移而退化。最终证明,维护代码库已成为一项艰巨的任务。虽然静态代码分析工具可以帮助开发人员验证或实施常见的最佳实践,但可以利用NArchTest创建单元测试以在其.NET、.NETCore和.NET6应用程序中实施架构规则。这些包括代码库中类设计、命名和依赖项的约定。开发人员可以在单元测试方法中使用NArchTest,然后将这些测试方法合并到构建和发布管道中,以在每次签入时自动验证模式规则。2.在VisualStudio2022中创建一个单元测试项目首先,使用xUnit测试项目模板在VisualStudio2022中创建一个单元测试项目。以下步骤将在VisualStudio2022中创建一个新的单元测试项目:(1)启动VisualStudio2022集成开发环境。(2)点击“创建新项目”。(3)在“CreateNewProject”窗口中,从显示的模板列表中选择“xUnitTestProject”。(4)单击下一步。(5)在“配置新项目”窗口中,指定新项目的名称和位置。(6)根据开发者的喜好,勾选“将解决方案和项目放在同一目录下”复选框。(7)单击下一步。(8)在接下来显示的“附加信息”窗口中,从顶部的下拉列表中选择.NET6.0作为目标框架。将“身份验证类型”保留为“无”(默认)。(9)确保取消选中“EnableDocker”、“ConfigureforHTTPS”和“EnableOpenAPISupport”复选框,因为这里不会使用这些功能。(10)点击创建。这将在VisualStudio2022中创建一个新的xUnit项目。本文的其余部分将使用该项目。3.在VisualStudio2022中创建一个类库项目现在在VisualStudio2022中创建一个类库项目。按照以下步骤在VisualStudio2022中创建一个新的类库项目:(1)启动VisualStudio2022IDE。(2)点击“创建新项目”。(3)在“CreateNewProject”窗口中,从显示的模板列表中选择“ClassLibrary”。(4)单击下一步。(5)在“配置新项目”窗口中,指定新项目的名称和位置。(6)单击下一步。(7)在接下来显示的“附加信息”窗口中,从顶部的下拉列表中选择.NET6.0作为目标框架。(8)点击创建。这将在VisualStudio2022中创建一个新的类库项目。本文的其余部分将使用该项目。4.在.NET6中创建模型类假设类库项目的名称是Core.Infrastructure。在SolutionExplorer窗口中,选择该项目并单击Add->NewFolder为项目添加一个新的解决方案文件夹。模型应与其解决方案文件夹同名。现在在Models解决方案文件夹中创建一个名为BaseModel的类并插入以下代码:publicabstractclassBaseModel{publicintId{get;放;}}再创建两个名为Product和Customer的模型类。这两个类中的每一个都应该扩展BaseModel类,如下所示:publicclassProduct:BaseModel{publicstringName{get;放;}publicdecimalPrice{get;放;}}publicclassCustomer:BaseModel{publicstringFirstName{get;放;}publicstringLastName{get;放;}}5.在.NET中创建一个服务类6在同一项目中创建另一个解决方案文件夹并将其命名为Services。在此解决方案文件夹中创建一个名为IBaseService的接口,并为其提供以下代码:publicinterfaceIBaseService{publicvoidInitialize();所有实现此接口的类都必须实现Initialize方法。ProductService和CustomerService类实现了IBaseService接口,如下面的代码片段所示:{//在这里写你的实现}publicList
