银河官网娱乐场网站-9992019.com-银河官网娱乐场

.NET Core系列 :4 测试

来源:http://www.2sini.net 作者:银河官网娱乐场 人气:158 发布时间:2019-10-20
摘要:      先是大家好像于.NET Core种类 :3、使用多个档期的顺序创立七个缓慢解决方案testdemo,加多三个类库项目名称叫DotnetCoreLib,Library.cs也交替为: namespace DotnetCoreLib {     public clas

 

 

 

先是大家好像于.NET Core种类 :3 、使用多个档期的顺序 创立七个缓慢解决方案testdemo,加多三个类库项目名称叫DotnetCoreLib,Library.cs 也交替为:

namespace DotnetCoreLib
{
    public class Calculator
    {
        public int Multi(int x, int y)
        {
            return x *.NET Core系列 :4 测试。 y;
        }
    }

}

图片 1

上边大家要创造二个对准DotnetCoreLib的测验项目,具体制程大家参照文章 ,我们修改DotnetCoreLibTest 项指标project.json ,扩充XUnit相关的nuget包援用,并修改部总布署。

 

图片 2 

还恐怕有大家设置Framework节点为 netcoreapp1.0, 信任的xunit 和xunit.runner的包

"dependencies": {
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "DotnetCoreLib": {
      "version": "1.0.0-*",
      "target": "project"
    },
    "xunit": "2.2.0-beta2-build3300",
    "xunit.runner.console": "2.2.0-beta2-build3300"
  }

 

Calculator接下去就以前测量检验大家的类库Calculator, 修改Class1.cs为CalculatorTest.cs ,

.NET Core系列 :4 测试。 

using DotnetCoreLib;
using Xunit;

 

namespace DotnetCoreLibTest
{
    public class CalTest
    {
.NET Core系列 :4 测试。        private readonly Calculator calculator;

        public CalTest()
        {
            calculator = new Calculator();
        }

 

        [Fact]
        public void OneMutiOneIsOne()
        {
            var result = calculator.Multi(1, 1);
            Assert.Equal(1, result);
        }

 

        [Theory]
        [InlineData(-1)]
        [InlineData(0)]
        [InlineData(1)]
        public void ReturnValue(int value)
        {
            var result = calculator.Multi(1,value);

            Assert.Equal(result, value);
        }
    }
}

 

上边的八个测量检验,我们分别用了2个特色[Fact] 和[Theory], [Fact]属性表示为一个办法的单个测量检验,[Theory]属性表示实践一样的代码,可是有例外的输入的参数的测量检验套件。[InlineData] 属性可用以钦赐为这几个输入值。通过特色[Fact] 和[Theory],xUnit就掌握了那是个测量检验方法,然后运转那么些法子。在一个测验方法中,大家日常根据满含三步骤的AAA模式:

  1. Arrange:为测验妄图
  2. Act:运行SUT(实际测量试验的代码)
  3. Assert:校验结果

下边咱们运营dotnet test 就足以看见结果了。

C:UsersgeffzDocumentsVisual Studio 2015ProjectsTestDemoDotnetCoreLibTest>dotnet test
Project DotnetCoreLib (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Project DotnetCoreLibTest (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
xUnit.net .NET CLI test runner (64-bit .NET Core win10-x64)
  Discovering: DotnetCoreLibTest
  Discovered:  DotnetCoreLibTest
  Starting:    DotnetCoreLibTest
  Finished:    DotnetCoreLibTest
=== TEST EXECUTION SUMMARY ===
   DotnetCoreLibTest  Total: 4, Errors: 0, Failed: 0, Skipped: 0, Time: 0.206s
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.

 

上面包车型地铁输出我们驾驭已经试行了4个测量试验,都通过了,[Face]特性标志表示固定输入的测量检验用例,而[Theory]特色标记表示能够钦点八个输入的测量检验用例,结合InlineData脾气标志应用。在上头的例子里,总共使用了一回InlineData特性标志,每一遍设定的值都区别,在实行单元测验时,设定的值会被测量检验框架赋值到相应的测量试验方法的参数里。你能够经过为您的项目拉长不相同的测量检验用例,那样就能够令你的代码获得充足测量试验。

 

 

xUnit.net 搭配NSubstitute 进行单元测量试验

 

   在四个支行结构清晰的门类里,各层之间依赖于事先约定好的接口。在四人合营开拓时,大相当多人都只会承担自身的那有个别模块功用,开垦进程常常情状下也差别样。当某些开荒职员须求对本身的模块实行单元测验而依据的别的模块还尚未支付完成时,则要求对依靠的接口通过Mock的艺术提供模拟作用,进而达到在不实际信赖别的模块的具体效果的意况下成功本人模块的单元测验工作。那时大家普通必要有一个单元测验模拟类库,长期以来,开荒者对 mocking 类库的语法的简洁性有分明的急需,NSubstitute 试图满意那黄金年代急需。老妪能解的语法能够让大家将宗旨放在测量试验本身,并不是纠缠在测验替代实例的创始和陈设上。NSubstitute 已尝试将最常用的操作须求轻松化、易用化,并帮衬部分一时用的或探求性的效劳,与此同一时间还尽量地将其语法向自然语言接近。关于NSubstitute的更详细消息请往 NSubstitute完全手册索引。

 

NSubstitute 已经发表2.0 RC版本支持.NET Core。引进NSubstitute 相关nuget包:

图片 3

大家把Calculator 类重构下提抽取接口ICalculator:

    public interface ICalculator
    {
        int Multi(int x, int y);
    }

 

我们得以让NSubstitute来成立项目实例的代表实例,能够创造诸如 Stub、Mock、Fake、Spy、Test Double 等,但当我们只是想要二个能有早晚水准决定的代表实例时,为什么我们要麻烦于此呢?大家得以告诉被创建的代表实例,当方法被调用时回来三个值:

     [Fact]
      public void Test_GetStarted_ReturnSpecifiedValue()
      {
          ICalculator calculator = Substitute.For<ICalculator>();
          calculator.Multi(1, 2).Returns(2);

          int actual = calculator.Multi(1, 2);
          Assert.Equal(2, actual);
      }

下边我们运营dotnet test 就能够看来结果了,扩大了地方的2个用例,关于NSubstitute的更详细消息请往 NSubstitute完全手册索引。

图片 4

 

购并测量试验

地点大家只是对逻辑进行了单元测量检验。对于Asp.Net Core项目,还亟需效法在网址计划的意况下对意气风发意气风发诉求入口实行测验。NET Core 可为火速轻巧集成测验提供非常的棒的支撑。

TestServer 类为 ASP.NET Core 中的集成测验实施大部分辛勤操作,Microsoft.AspNetCore.TestHost 包中有着此类。本节内容出自于MSDN杂志《 ASP.NET Core - 实际的 ASP.NET Core MVC 筛选器》,那一个合併测验无需数据库或 Internet 连接或运行的 Web 服务器。它们就如单元测量检验同样赶快不难,但最根本的是,它们允许你在整整诉求管道中测试ASP.NET 应用,而不只是调控器类中的孤立方法。提出尽量编写单元测量检验,并针对性不只怕单元测验的行事退回到集成测量检验,但利用此类高质量方式在 ASP.NET Core 中运维集成测验是老大棒的。

 

通过在一个工程里还要效仿了服务端(TestServer)和顾客端(HttpClient)的通讯,从而达到了完整测量试验WebApi接口的目标,相关的代码放在 。文章对ASP.NET CORE MVC的筛选器实行测验,由于很难通过编写制定单元测验来测量试验此类现象,可是可以透过ASP.NET Core 的融会测验来实现一样的目标。

using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using Filters101;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;

 

namespace IntegrationTests
{
    public class AuthorsControllerTestBase
    {
        protected HttpClient GetClient()
        {
            var builder = new WebHostBuilder()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>()
                .UseEnvironment("Testing");
            var server = new TestServer(builder);
            var client = server.CreateClient();

            // client always expects json results
            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));

            return client;
        }
    }
}

 

 

using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Filters101.Models;
using Newtonsoft.Json;
using Xunit;

namespace IntegrationTests.AuthorsController
{
    public class Get : AuthorsControllerTestBase
    {
        private readonly HttpClient _client;

        public Get()
        {
            _client = base.GetClient();
        }

        [Theory]
        [InlineData("authors")]
        [InlineData("authors2")]
        public async Task ReturnsListOfAuthors(string controllerName)
        {
            var response = await _client.GetAsync($"/api/{controllerName}");
            response.EnsureSuccessStatusCode();
            var stringResponse = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<IEnumerable<Author>>(stringResponse).ToList();

            Assert.Equal(2, result.Count());
            Assert.Equal(1, result.Count(a => a.FullName == "Steve Smith"));
            Assert.Equal(1, result.Count(a => a.FullName == "Neil Gaiman"));
        }
    }
}

此案例中的顾客端是正统的 System.Net.Http.HttpClient,你可以应用它向服务器发出诉求,正就像通过网络一样。但因为兼具央求都在内部存款和储蓄器中张开,所以测量检验最棒飞速可信赖。在cmd窗口进行单元测量试验,查看测量试验结果

图片 5

         精通越来越多关于xUnit.net能够参谋这里(点击展开链接[舍弃Nunit拥抱Xunit])。

动用xUnit.net 单元测验

二〇一五.6.27 微软已经正式文告了.NET Core 1.0 RTM,不过工具链照旧预览版,同样的大气的开源测量试验库也皆甚起码公布了Alpha测量检验版支持.NET Core, 那篇文章 The State of .Net Core Testing Today 就将顺序开源测验库的脚下实行进行了汇总。本文大家的目标是在大家创设大家应用程序的时候能够进行测量试验,怎么着运用XUnit结合您能够透过为你的项目拉长分歧的测量检验用例NSubstitute进行单元测量试验,同临时间对全部项目张开合併测量试验。本次大家运用Visual Studio 2016 Update 3举行编写 。xUnit.net是基于.NET Framework 的开源测验工具。通过xUnit.net能够针对C#/F#/VB.NET等进行单元测量试验。ASP.NET Core 越来越直白把昔日的Visual Studio Unit Test Framework 说再见了,而直白采用上了xUnit.net,xUnit.net基于NUnit 。从网址依旧官网络,你能够找到不菲xUnit的长处,与NUnit和别的测验框架相比有刹那间局地优势 
         1)为各种测验方法发生二个目的实例
         2)取消了[SetUp]和[TearDown]
         3)取消了[ExpectedException]
         4)类似于Aspect的功能
         5)减弱了自定义属性(Attribute)的数目
         6)选择泛型
         7)无名氏委托
         8)可扩张的断言
         9)可扩大的测量检验方法
         10)可增加的测量检验类

本文由银河官网娱乐场网站 发布于银河官网娱乐场,转载请注明出处:.NET Core系列 :4 测试

关键词:

最火资讯