webapi xunit单元测试_.net core webapi xunit单元测试 - CSDN
精华内容
参与话题
  • webAPI xUnit单元测试

    千次阅读 2018-08-18 13:23:33
    通常我们在编码完成功能后,都需要进行单元测试,编写单元测试的好处在于有助于代码维护。 一、测试框架MSTest与xUnit比较 特性比较 MSTest xUnit 备注 [TestClass] 无 标记为测试类 [TestMethod...

    通常我们在编码完成功能后,都需要进行单元测试,编写单元测试的好处在于有助于代码维护。

    一、测试框架MSTest与xUnit比较

    特性比较
    MSTest xUnit 备注
    [TestClass] 标记为测试类
    [TestMethod] [Fact] 标记为测试方法
    [ExpectedException] Assert.Throws 期望抛出异常
    [TestInitialize] Constructor 在每个测试方法执行之前用于初始化的方法
    [TestCleanup] IDisposable.Dispose 在每个测试方法执行之前用于结束的方法
    [ClassInitialize] IUseFixture<T> 在所有测试方法执行之前用于初始化的方法
    [Ignore] [Fact(Skip="reason")] 跳过测试设置
    [Timeout] [Fact(Timeout=n)] 用于指定被测试方法的最大执行时间(单位毫秒),若超过指定的标记时间,则被认为测试失败
    [TestProperty] [Trait] 设置任意的测试数据
    [DataSource] [Theory], [XxxData] 理论上的数据驱动测试
    断言比较
    MSTest xUnit 备注
    AreEqual Equal 相等比较
    AreNotEqual NotEqual 不相等比较
    AreNotSame NotSame 不相同比较
    AreSame Same 相同比较
    Contains (on CollectionAssert) Contains 包含比较

    DoesNotContain (on CollectionAssert)

    DoesNotContain 不包含比较

    DoesNotThrow

    不抛出异常
    Fail 失败
    Inconclusive  
    InRange 在范围内
    IsAssignableFrom  
    Empty  
    IsFalse False  
    IsInstanceOfType IsType  
    IsNotInstanceOfType IsNotType  

    IsNotNull

    NotNull  
    IsNull Null  
    IsTrue True  
    NotInRange 不在范围内
    Throws 抛出异常

    二、webAPI 创建xUnit单元测试

    1、使用VSCode创建webAPI项目(命令 dotnet new webapi)

    2、使用VSCode创建xunit项目(命令 dotnet new xunit)

    3、xunit 项目添加对webAPI项目的引用

    4、单元测试代码示例

    using System;
    using System.Collections.Generic;
    using Microsoft.AspNetCore.Mvc;
    using UnitTestCommonLib;
    using UnitTestWebAPI.Controllers;
    using Xunit;
    
    namespace WebAPIUnitTest
    {
    	[Collection("Sequential")]
    	public class ClerkUnitTest
    	{
    		CommonHelper commonHelper = new CommonHelper();
    		ClerkEntities clerkEntities = new ClerkEntities();
    
    		/// <summary>
    		/// test GetClerkList
    		/// </summary>
    		[Fact]
    		public void GetClerkList()
    		{
    			//create test data for CSB004
    			var clerkList = new List<CSB004>
    			{
    				new CSB004 { Ucode = "000000000001", ClkCode = "0000000001", ClkName = "clkname1", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" },
    				new CSB004 { Ucode = "000000000001", ClkCode = "0000000002", ClkName = "clkname2", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" },
    				new CSB004 { Ucode = "000000000002", ClkCode = "0000000002", ClkName = "clkname2", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" }
    			};
    			clerkEntities.csb004.AddRange(clerkList);
    			clerkEntities.SaveChanges();
    			//create test examples
    			var testcol = new GetClerkListController();
    			GetClerkListController.InputModel input = new GetClerkListController.InputModel();
    			// data exist
    			input.Ucode = "000000000001";
    			var actualValue = testcol.GetClerkList(input);
    			var actualModel = JsonHelper.JsonToEntity<CommonHelper.ReturnInfo>(actualValue);
    			//No data exist -No data in CSB004
    			input.Ucode = "000000000003";
    			var actualValue1 = testcol.GetClerkList(input);
    			// when ucode is empty
    			input.Ucode = "";
    			var actualValue2 = testcol.GetClerkList(input);
    			var actualModel2 = JsonHelper.JsonToEntity<CommonHelper.ReturnInfo>(actualValue2);
    			//clear test data
    			clerkEntities.csb004.RemoveRange(clerkList);
    			clerkEntities.SaveChanges();
    			//verify
    			Assert.NotNull(actualValue);
    			Assert.Equal(CommonHelper.ERROR_CORRECT, actualModel.errorcode);
    			Assert.Equal(commonHelper.ReturnCodeMessage(CommonHelper.ERROR_NORECORD), actualValue1);
    			Assert.Equal(CommonHelper.ERROR_REQUIRED, actualModel2.errorcode);
    			Assert.Equal("Ucode", actualModel2.maininfo);
    		}
    }

    5、注:测试类中的[Collection("Sequential")]标注,防止同一个单元测试项目中,不同测试类中的不同测试方法在测试运行时,出现数据冲突,造成测试失败

    展开全文
  • 基于令牌的身份认证对于浏览器,ASP.NET Zero 使用基于Cookie的身份认证,但是,如果在移动应用程序...在.WebApi项目中的AccountController 有一个Authenticate 动作,用于获取令牌,然后你就可以在后续请求中使用该令

    基于令牌的身份认证

    对于浏览器,ASP.NET Zero 使用基于Cookie的身份认证,但是,如果在移动应用程序中使用Web API或应用服务(通过动态Web API公开),可能需要基于令牌的身份认证机制。ASP.NET Zero中包含令牌身份认证基础架构。在.WebApi项目中的AccountController 有一个Authenticate 动作,用于获取令牌,然后你就可以在后续请求中使用该令牌。

    这里,Postman(Chrome 扩展)将用于演示请求和相应信息。

    身份认证

    如下图所示,向 http://localhost:6234/api/Account/Authenticate 发送一个Context-Type=”application/json”的POST请求

    这里写图片描述

    我们发送了一个Json的请求,消息体中包含tenancyName, userNameOrEmailAddress 和 password。tenancyName不会被用来作为管理员用户的身份认证。如上所示,返回JSON里的result属性包含了令牌,你可以保存或者在后续请求中使用。

    使用API

    你可以用验证后得到的令牌调用任何需要授权的行为。所有的应用服务都可以远程调用。举个栗子,你可以使用User Service来获取用户列表:

    这里写图片描述

    只需要发出一个包含Content-Type=”application/json”*和Authorization=”Bearer your-auth-token”的POST请求到http://localhost:6234/api/services/app/user/GetUsers*,请求的body为空。当然,请求和响应的主体信息会根据调用的API不同而不同。

    几乎所有的用户界面也可以通过使用API来操作(因为用户界面也使用相同的Web API)。

    SWAGGER UI

    ASP.NET Zero 已经集成了 Swagger UI。Swagger UI 在WebApi 项目中的 WebApiModule类中进行配置,可以浏览器中打开”/swagger/ui/index”来访问 Swagger UI。

    这里写图片描述

    单元测试

    ASP.NET Zero 启动项目包含了单元测试和集成测试。测试组件使用下列工具开发:
    - xUnit 作为测试框架
    - Shouldly 作为断言库
    - Effort Mocking 实体和数据库
    - Abp.TestBase 简化了ABP的应用集成测试

    测试覆盖了领域层(Core)和应用层。打开测试资源管理器(在VS主菜单的 测试\窗口 下面)运行单元测试。

    在ASP.NET Zero 2.2版本里面针对单元测试引入了一个叫 MultiTenancyEnabled
    的配置项。如果在你领域层中没有启用多租户,那么你还需要在单元测试项目的
    app.config中将该设置改为false,这样,多租户的测试将不会执行。因为一些单元测试(租户创建,版本创建等)只适用于多租户概念。

    这里写图片描述

    这些单元测试可以帮助你理解代码。此外,当你为你的应用层的方法写单元测试时,他们也可以作为一个模板。

    所有的单元测试类()都派生于AppTestBase。它为每个测试初始化ABP系统,使用Effort模拟数据库,创建测试数据并且创建日志。它也为一些测试提供了一些常用的方法。

    下面是一个应用层的单元测试例子:

    public class UserAppService_Delete_Tests : UserAppServiceTestBase
    {
        [Fact]
        public async Task Should_Delete_User()
        {
            //Arrange
            CreateTestUsers();
    
            var user = await GetUserByUserNameOrNullAsync("artdent");
            user.ShouldNotBe(null);
    
            //Act
            await UserAppService.DeleteUser(new IdInput<long>(user.Id));
    
            //Assert
            user = await GetUserByUserNameOrNullAsync("artdent");
            user.IsDeleted.ShouldBe(true);
        }
    }

    它首先创建了一些测试用户,然后检查是否有一个用户名为”artdent”的用户,找到后调用UserAppServiceDeleteUser方法(正在测试)。最终,确认这个用户是否被删除。这里,用户是执行的软删除,所以被执行删除后,它的IsDelete属性将变为true。

    该文章了解更多关于单元测试的知识。

    使用到的库和框架

    在ASP.NET Zero里使用到许多开源框架和库。

    展开全文
  • 23个.net开源项目框架

    千次阅读 2014-02-14 15:10:35
    http://codeplex.com/xunit">[TEST] xUnit.net - 用于TDD的最好的测试框架之一。  http://ayende.com/projects/rhino-mocks.aspx">[TEST] RhinoMocks mocking framework - 通过创建mock使测试更简单。  ...
    
    
    1. [TEST] xUnit.net - 用于TDD的最好的测试框架之一。
    2. [TEST] RhinoMocks mocking framework - 通过创建mock使测试更简单。
    3. [TEST] White for automation of Windows applications - 用代码驱动Windows程序来测试。
    4. [TEST] Gallio Automation Platform - 可以运行很多测试框架,如MSTest、xUnit、NUnit以及MbUnit。
    5. [DATA] Fluent NHibernate - Fluent NHibernate让你可以用C#代码来设置映射关系。
    6. [OOP] StructureMap Dependency Injection/Inversion of Control - 解耦类和依赖。
    7. [OOP] Managed Extensibility Framework - 从静态编译程序转换到动态语言程序
    8. [APPFX] s#arp architecture for web applications - 用ASP.NET MVC和NHibernate快速开发web应用程序。
    9. [APPFX] OpenRasta REST based framework for building web applications - 让你的程序拥有一个REST API接口。
    10. [APPFX] CSLA.NET Application Framework - .NET开发综合框架
    11. [APPFX] Spring.NET Application Framework - Web开发综合框架
    12. [RUNTIME] Mono enables .NET on Linux and Mac - 在Linux、BSD和OS X上使用.NET.
    13. [UTIL] Sandcastle Help File Builder - 创建MSDN样式的文档。
    14. [HELPER] EasyHook for Windows API Hooking - 用托管代码扩展非托管代码。
    15. [HELPER] Json.NET for working with JSON formatted data - 用一条语句序列化.NET对象。
    16. [HELPER] Excel Data Reader for Excel 97 to 2007 - 将Excel文件读取到Dataset中
    17. [HELPER] #SNMP Library - 对SNMP的包装。
    18. [HELPER] DotNetZip Library - ZIP库和示例。
    19. [HELPER] Visio Automation Library - 用C#、VB和其它语言驱动Viso
    20. [HELPER] PHPExcel is not just about Excel! - 读写Execel 2007、PDF、HTML等文档的PHP类
    21. [HELPER] Argotic Syndication Framework for RSS, Atom, OPML and more - 读写聚合内容的库
    22. [HELPER] NLog logging library -让你的程序易于调试
    23. A great directory of C# Open Source software - 一个非常好的库、框架和工具列表
    展开全文
  • 详细介绍Python项目在Jenkins中的自动化测试实践过程。

    转载请注明原始链接:http://blog.csdn.net/a464057216/article/details/52934077

    后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
    在这里插入图片描述

    requirments

    • OS: Ubuntu 14.04+
    • Gitlab 8.1 +
    • Jenkins 2.19.0 +

    介绍

    在Jenkins上对Github项目或者Gitlab项目做自动化构建的初级配置方法可以参考自动化工具Jenkins安装配置入门。在Ubuntu上搭建Gitlab服务器的方法也可以参考我之前的博文

    使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试)、pylint(语法检查)、coverage(代码覆盖率)等工具,配合插件在Jenkins的Web界面展示测试结果。如果使用Gitlab托管代码,本文也涵盖了Jenkins与Gitlab配合的配置方法,最终效果如下:

    1.代码改动push到Gitlab自动触发Jenkins构建项目,执行自动化测试。
    2.测试包括基本功能测试、覆盖率分析、语法检查等,所有的测试结果在Jenkins上展示,包括测试通过率分析(可以具体到每个用例的通过情况)、测试覆盖率可以具体到每一行、语法检查可以具体到每一行的错误细节。
    3.如果测试成功,Jenkins新建一个Tag提交到Gitlab项目中,同时生成一个供下载的zip包。
    4.Jenkins界面包含项目代码行数分析。
    5.在Gitlab项目的commits列表中看到可以每一次CI的结果,点击build-id后会跳转到Jenkins界面查看构建信息。在Jenkins中点击相应的commit-hash会跳转到Gitlab对应提交的diff页面。

    准备测试结果数据

    项目代码行数分析依赖sloccount这个工具,首先在Jenkins服务器上安装它:

    # Written by: CSDN - Mars Loo的博客
    sudo apt-get update
    sudo apt-get install sloccount
    

    在构建中增加构建步骤,选择Execute shell
    这里写图片描述

    在其中填写如下内容(其中mypackage是被测试的package的名字):

    # Written by: CSDN - Mars Loo的博客
    virtualenv --no-site-packages env
    . env/bin/activate
    pip install --quiet nosexcover
    pip install --quiet pylint
    nosetests --with-xcoverage --with-xunit --cover-package=mypackage --cover-erase
    pylint -f parseable mypackage/ | tee pylint.out
    sloccount --duplicates --details mypackage > sloccount.sc
    tar --exclude *pyc -zcf mypackage.tar.gz mypackage 
    

    nosetests.xml

    --with-xunit选项会生成nosetests.xml文件,在构建后操作中勾选Publish JUnit test result report即可显示该部分的内容:
    这里写图片描述

    在构建结果的Test Result页面可以看到测试结果(点击进入可以看到结果详情):
    这里写图片描述

    coverage.xml

    --with-xcoverage选项会生成coverage.xml文件,安装Cobertura Plugin后可以在构建后操作中勾选Publish Cobertura Coverage Report填写相关信息:
    这里写图片描述

    构建完成后,在构建信息的Cobertura Coverage Report页面,可以看到测试覆盖率变化的趋势,和具体到每个文件的覆盖情况:
    这里写图片描述

    pylint.out

    pylint生成的语法检查报告pylint.out需要配合Violations plugin插件使用,然后在构建后操作中勾选Report Violations,找到pylint的配置并填写:
    这里写图片描述

    构建后在构建记录中即可以看到具体到文件每一行的语法检查结果:
    这里写图片描述

    准备Gitlab侧API token

    在个人信息的Account界面生成Private token:
    这里写图片描述

    在Jenkins上添加对应API token的Credential

    Credentials管理界面添加该API token:
    这里写图片描述
    然后在Jenkins系统设置的Gitlab部分填写相关信息(使用刚才添加的API token,可以点击Test Connection测试配置是否OK):
    这里写图片描述

    配置Jenkins项目

    在Jenkins的自由风格的软件项目中设置如下内容:
    这里写图片描述

    虽然使用的是Gitlab,但是在Github project中配置相关信息之后,可以在构建记录中点击commit-id直接跳转到Gitlab的diff页面:
    这里写图片描述

    上面的GitLab Repository Name主要配合Gitlab logo插件使用,先在Jenkins的系统设置中设置GitLab Account Setting(使用之前在Gitlab上生成的API token):
    这里写图片描述

    填写项目在Gitlab的Project URL后,在Jenkins的项目列表中可以显示项目在Gitlab上的图标:
    这里写图片描述

    继续配置自由项目的源码管理部分,这里使用的Credentials是Jenkins服务器访问Gitlab使用的私钥信息而不是之前配置的APi token,Refspec中的信息为:

    +refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
    

    这里写图片描述

    构建触发器配置如下:
    这里写图片描述

    这里没有选择Poll SCM的方式,如果选择这种方式的话,为了提高Jenkins的响应速度,通产会设置较短的轮询周期比如1分钟,这样Jenkins上面项目过多的话对Gitlab的API访问频率太高。

    为了将Jenkins的每次构建信息发布到Gitlab,需要在构建后的操作步骤中添加Publish build status to Gitlab Commit
    这里写图片描述

    如果构建成功,Jenkins提交新建的Tag到Gitlab时,需要使用的SSH私钥有可写权限,然而Gitlab的deploy key是没有写权限的,所以要在Gitlab中添加对应公钥到用户信息的SSH Keys信息中使其具有写权限,然后在Jenkins的构建后的操作步骤中添加Git Publisher
    这里写图片描述

    上面配置中的Target remote name应该与源码管理->git->Repositories中的name信息一致。

    在Jenkins的构建后的操作中添加Public SLOCCount analysis results(需要先安装SLOCCount Plug-in插件):
    这里写图片描述
    然后在Jenkins的构建记录页面可以看到项目代码行数的变化趋势及各个语言的代码行数变化:
    这里写图片描述
    这里写图片描述

    Jenkins的构建后的操作步骤中添加Archive the artifacts
    这里写图片描述
    把这个步骤放在构建后的操作步骤中的最后,然后在每次成功构建后会生成一个下载链接供下载包:
    这里写图片描述

    配置Gitlab的webhook

    在Gitlab的对应项目上配置webhook,trigger的URL是Jenkins页面中GitLab CI Service URL后面给出的URL,勾选Push eventsMerge Request events等自己需要的条件,如果Jenkins没有https支持,去勾选Enable SSL verification,然后点击Add Webhook,点击Test按钮尝试触发Jenkins构建即可。

    至此使用Jenkins对Python项目进行自动化测试的搭建已经全部完成。如果对Gitlab上的项目的master分支有修改的话,Jenkins会立即触发构建(下图中的第29次构建,当然也可以在Jenkins的Web管理界面手工触发构建如第30次构建):
    这里写图片描述

    构建完成后构建结果会同步到Gitlab中(点击对应的对号或者差号后再新的页面点击对应的build id会跳转到Jenkins的构建信息页面):
    这里写图片描述
    对于成功的构建,Jenkins会自动新建一个Tag并提交到Gitlab:
    这里写图片描述

    如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

    展开全文
  • 7个常用的Java测试工具和框架

    千次阅读 2017-12-11 10:45:25
    自动化测试可以快速自动完成大量测试用例,节约巨大的人工测试成本;同时它需要拥有专业开发技能的人才能完成开发,且需要大量时间进行维护(在需求经常变化的情况下),所以大部分具有很好开发技能的人员不是很愿意...
  • 白盒测试方法和工具

    万次阅读 2016-08-28 20:29:53
    1. 白盒测试 白盒测试又称结构测试、逻辑驱动测试或基于程序本身的测试测试者把被测程序看成一个盒子,而这个盒子是打开着的,以程序的内容来设计测试数据。采用这种测试方法,测试人员对被测试程序的内部结构...
  • web接口测试

    千次阅读 2014-05-02 15:36:11
    原:http://www.blogjava.net/qileilove/archive/2013/06/20/400768.html
  • 揭示.NET Core和.NET Standard

    万次阅读 2017-10-09 11:24:09
    作为.NET家族的最新成员,有很多关于.NET Core和.NET Standard的误解,以及它们于.NET Framework之间的区别。在这篇文章,我会准确的解释他们究竟是什么,并看看何时应选择哪一个。在详细介绍之前,首先查看.NET的...
  • 一、前言 本篇开发环境?1、操作系统: Windows 10 X642、SDK: .NET Core 2.0 Preview 二、安装 .NET Core SDK 1、下载 .NET Core下载地址:https://www.microsoft.com/net/download/core根据自己电脑...
  • ASP.NET Core: 全新的ASP.NET !

    万次阅读 2016-07-08 19:56:12
    ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用 。它是从底层开始重新构建来提供性能优良的Web应用开发框架,可以部署在云上或者本地服务器上。另外,它使得 ASP.NET 应用更加精简和...
  • Web自动化测试中的接口测试

    千次阅读 2016-05-25 14:11:21
    Web自动化测试中的接口测试 1、背景 1.1 Web程序中的接口 1.1.1 典型的Web设计架构 web是实现了基于网络通信的浏览器客户端与远程服务器进行交互的应用,通常包括两部分:web服务器和web客户端。web客户端的...
  • .NET开发中使用到的一些技术和框架

    千次阅读 2016-03-01 14:10:24
    Ninject和Autofac,Spring.NET性能,是否属于侵入性框架,侵入性大小,大型项目应用小型项目:NLite + ASP.NET MVC + NHibernate 小型项目:MEF + ASP.NET MVC + EF(Entity Fromework) 中型项目:Ninject + ASP...
  • ABP官方文档(一)【入门介绍】

    千次阅读 2017-10-31 10:59:05
    ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序基础框架和项目模板。 ASP.NET Boilerplate 基于DDD的经典分层架构思想,实现了众多DDD的概念(但...
  • 移动APP自动化测试框架对比

    万次阅读 2016-10-20 18:34:01
    最大量实现自动化测试的应该是单元测试,最容易实现也最容易在早期发现问题;其次是接口级测试,以验证逻辑为目的进行自动化,由于接口的相对稳定,自动化测试成本相对也可以接受;自动化成本最大的便是UI级自动化...
  • go单元测试进阶篇

    千次阅读 2017-01-11 16:27:13
    版权声明:本文由腾讯云数据库团队 原创文章,转载请注明出处:  文章原文链接:... ... ...作者介绍:熊训德(英文名:Sundy),16年毕业于四川大学大学并加入腾讯。目前在腾讯云从事
  • 自动化测试软件分类

    千次阅读 2017-01-19 17:23:13
    从基本的由一类似于是xUnit单元测试框架(NUnit,JUnit,CppUnit,HttpUnit)开始, 每一个测试需要完成一些设置在它开始之前,最后还需要做一些清理工作,并且产生详细的报告与结果。自动化测试的抽象层图是这样的: ...
  • 它是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。个人理解:每次软件做版本迭代,为防止引入新的问题,需要对重要功能的接口进行基本功能测试。此时可以考虑做成自动化(在...
  • 8个超实用的Java测试工具和框架

    千次阅读 2015-06-24 10:18:45
    Java入门 如果你才刚开始接触Java世界,那么要做的第一件...它能让你在自己的电脑上编译、运行、测试你的Java程序。 此外,你还需要IDE(集成开发环境)。选择有很多,如IntelliJ、Eclipse和NetBeans。 Java测试工具
  • MVC与WebForm比较

    千次阅读 2013-03-13 14:08:43
    ASP.NET Web Forms有哪些不足?   传统的ASP.NET Web Forms是一个非常好的主意,但现实需求非常复杂。随着时间的推移,现实世界的项目暴露出Web Forms的一些不足之处:   “沉重的”视图状态:现实中在http...
  • .NET Core的CLI使用方法大全

    千次阅读 2017-03-31 19:28:58
    一、dotnet命令的作用  通过命令行,完成跨平台的.NET Core项目的创建、编译、包的还原,程序的运行等等。  dotnet命令:查看与dotnet命令相关的一些信息,详情如下  dotnet [command] [arguments] [--version] ...
1 2 3 4 5 ... 20
收藏数 1,983
精华内容 793
关键字:

webapi xunit单元测试