Board logo

标题: 一文带你快速读懂.NET CLI(4) [打印本页]

作者: look_w    时间: 2019-4-12 15:36     标题: 一文带你快速读懂.NET CLI(4)

作为一个有经验的.NET开发人员,我非常担心临时/obj和/bin文件夹中残留的文件。因此,我在Visual Studio中使用“Clean Solution”命令,以防我试图改变引用的时候落下些什么。从命令行执行“dotnet clean”命令是完全相同的操作。

同样,针对众所周知的Nuget依赖问题,“dotnet restore”命令在解决方案中都试着去解决了。在这种情况下,使用“dotnet restore”可以让我们快速发现任何潜在的冲突或丢失的Nuget引用,而无需进行完整的编译,我在自己的工作中主要就采用该命令。在最新版本的dotnet cli中,在调用“dotnet build/test/pack/etc”时,会自动为您完成Nuget解析(该行为可以用标记覆盖),这将首先需要Nuget。

我们调用的“dotnet restore DotNetCliArticle.sln”干净利落地运行完毕,没有错误,所以我们终于可以准备编写一些代码了。让我们打开您选择的C#编辑器,向HeyWorld添加一个代码文件。测试项目包含一个非常简单的HTTP协议测试,它将指定我们希望从新的HeyWorld应用程序中的“GET: /”路由获得的行为:

using System.Threading.Tasks;using Alba;using Xunit;namespace HeyWorld.Tests{    public class verify_the_endpoint    {        [Fact]        public async Task check_it_out()        {            using (var system = SystemUnderTest.ForStartup\u0026lt;Startup\u0026gt;())            {                await system.Scenario(s =\u0026gt;                {                    s.Get.Url(\u0026quot;/\u0026quot;);                    s.ContentShouldBe(\u0026quot;Hey, world.\u0026quot;);                    s.ContentTypeShouldBe(\u0026quot;text/plain; charset=utf-8\u0026quot;);                });            }        }    }}

结果文件应该保存在具有适当名称(如verify_the_endpoints.cs)的HeyWorld.Tests目录。

在没有深入了解Alba机制前,我们的新HeyWorld应用的首页路由应该写出“Hey, world”。虽然我们还没有在HeyWorld应用中编写任何实际的代码,但是我们仍然可以运行这个测试,看看它能够连接正确,还是因为某些“理所当然的理由”而失败。

回到命令行,我可以使用以下命令运行测试项目中的所有测试:

dotnet test HeyWorld.Tests/HeyWorld.Tests.csproj

我们的一个测试会失败,因为还没有实现任何东西,它给了我们这样的输出:

Build started, please wait...Build completed.Test run for /Users/jeremydmiller/code/DotNetCliArticle/HeyWorld.Tests/bin/Debug/netcoreapp2.1/HeyWorld.Tests.dll(.NETCoreApp,Version=v2.1)Microsoft (R) Test Execution Command Line Tool Version 15.7.0Copyright (c) Microsoft Corporation. All rights reserved.Starting test execution, please wait...Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.Test Run Successful.Test execution time: 2.4565 Seconds

为了把输出求和,执行了一个测试,但是失败了。我们还可以看到标准的xUnit输出,它提供了一些关于测试失败原因的信息。这里需要注意的是,“dotnet test”命令将返回一个退出代码,如果所有测试都通过,则返回0,表示成功;如果任何测试失败,则返回一个非零退出代码,表示失败。这对于持续集成(CI)脚本非常重要,大多数CI工具使用任何命令的退出代码来确定构建何时失败。

我认为上面的测试之所以失败是因为“理所当然的原因”,这意味着测试工具似乎能够引导真正的应用程序,我希望得到404响应,因为还没有编写任何代码。接下来,让我们为预期的行为实现一个MVC Core 端点:

public class HomeController : Controller{    [HttpGet(\u0026quot;/\u0026quot;)]    public string SayHey()    {        return \u0026quot;Hey, world!\u0026quot;;    }}

(注意,前面的代码应该作为HeyWorld\\startup.cs文件中的附加类添加)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0