测试 ASP.NET Core 应用程序 - 跨平台开发人员体验
介绍
现在,.NET Core 和 ASP.NET Core 在全球范围内的使用越来越广泛,开发人员不得不重新审视创建 Web 应用程序的工具和方法。本指南将介绍如何使用跨平台工具(例如 dotnet CLI工具和 Visual Studio Code)测试简单的 ASP.NET Core MVC 应用程序。虽然绝大多数源代码与使用 Windows 上的 Visual Studio 编写的项目相同,但目标是专注于流程。
完成的示例的代码可以在Github上找到。
先决条件
我假设您已经安装了 .NET Core SDK、Visual Studio Code 和 C# 扩展。我还假设您有开发简单 ASP.NET MVC(Core 或其他)应用程序的经验。本指南是关于测试的,而不是开发的。
设置
我将从 Visual Studio Code 开始。打开集成终端窗口后,我将切换到开发目录并为演示项目创建一个新目录。这将是电子商务应用程序的开始,因此我将其命名为CoreStore。
> mkdir CoreStore
> cd CoreStore
接下来我将创建两个项目,一个用于 Web 应用程序,一个用于单元测试。Web 应用程序项目将命名为CoreStore.Web。
> dotnet new web -o CoreStore.Web
现在继续在 Visual Studio Code 中打开文件夹。这将提示添加构建和调试资产。为了确保它们已为 Web 项目正确配置,必须在添加测试项目之前完成此操作。
两个框架
测试项目需要做出选择。dotnet CLI 支持两个测试框架。第一个是来自微软的 MSTest。这是一款优秀的产品,如果您之前有在 Visual Studio 中测试微软软件的经验,那么您可能已经使用过它。
但是现在我们处在一个跨平台的世界,虽然 MSTest 和 .NET Core 是跨平台的,但还有其他选择。其中之一是xUnit.net 。这是一个受xUnit 概念启发的开源项目。有许多框架遵循这种结构,而 xUnit.NET 是 .NET 项目的框架。xUnit的dotnet模板是xunit。我将测试项目命名为CoreStore.Tests。
> dotnet new xunit -o CoreStore.Tests
因此,在 Visual Studio Code 中打开时,整个项目结构应如下所示:
图 1. 项目文件夹结构
CoreStore.Web 设置
空的 ASP.NET Core Web 应用程序不支持 MVC。我本可以从dotnet CLI 创建一个骨架 MVC 应用程序,但它会包含大量管道和入门内容,这些内容会造成阻碍。相反,我将手动添加 MVC。只需几行代码即可。
首先在Startup.cs文件的ConfigureServices方法中添加以下一行代码:
services.AddMvc();
然后在Configure方法中,删除对app.Run的调用并将其替换为以下内容:
app.UseMvcWithDefaultRoute();
这与使用默认Home控制器、Index操作和可选id创建显式路由相同。因此,我需要创建这些资源。首先,在CoreStore.Web项目根目录中,我将添加一个名为Controllers的新文件夹以遵循 ASP.NET Core MVC 约定。在该文件夹中,我将继续使用名为HomeController.cs的 C# 文件来遵守约定。
图 2. Controllers 文件夹结构
HomeController类非常简单:
namespace CoreStore.Web.Controllers
{
public class HomeController: Controller
{
public IActionResult Index()
{
return View();
}
}
}
我将在整个指南中向此类添加更多内容,但首先我将使用一个操作方法,该方法将返回其默认视图。所以我需要创建它。在CoreStore.Web项目根目录中,我将创建一个名为Views 的新文件夹,并在其中创建一个名为Home 的子文件夹。在Home文件夹中,我将放置一个名为Index.cshtml的视图文件。目前,视图文件将包含一些简单的 HTML。
<h1>The Index Page</h1>
这是Visual Studio Code 中完整的CoreStore.Web项目结构。
图 3. CoreStore.Web 项目结构
CoreStore.Tests 设置
设置CoreStore.Tests项目的唯一任务是添加对作为测试目标的CoreStore.Web项目的引用。在集成终端中,我将切换到测试项目的目录。
> cd CoreStore.Tests
然后使用dotnet CLI 添加对CoreStore.Web项目文件的引用。
> dotnet add reference ../CoreStore.Web/CoreStore.Web.csproj
打开CoreStore.Tests.csproj文件,注意新的ProjectReference标签。
<ItemGroup>
<ProjectReference Include="..\CoreStore.Web\CoreStore.Web.csproj" />
</ItemGroup>
最后一步
最后一步很奇怪。目前,除非重新启动编辑器,否则 Visual Studio Code 不会为引用的项目提供 Intellisense。我不确定是什么原因造成的,但幸运的是解决方案很简单。只需在 macOS 上使用 Cmd-Shift-P 或在 Windows 上使用 Ctrl-Shift-P 打开命令面板。在搜索栏中,键入reload并选择“重新加载窗口”选项。
图 4. 重新加载编辑器
第一次测试
创建项目时,dotnet CLI添加了基本测试文件。它位于UnitTest1.cs文件中。我首先将此文件重命名为ControllerTests.cs。然后我将打开ControllerTests.cs并将UnitTest1类重命名为ControllerTests。
类本身不需要明确标记为包含单元测试;测试本身用[Fact]属性标记。dotnet CLI 已为我创建了其中一个。我将测试重命名为更具描述性的名称,例如VerifyIndexViewType 。ControllerTests类现在如下所示:
public class ControllerTests
{
[Fact]
public void VerifyIndexViewType()
{
}
}
此测试将创建HomeController类的新实例,调用Index方法,然后检查返回类型应为ViewResult。
var controller = new HomeController();
var result = controller.Index();
Assert.IsType<ViewResult>(result);
图 5. 编辑器中的错误
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~