• .Net Core的简单单元测试基于Mock和自定义


    首先创建

    使用mock 外部依赖一般用Mock 模拟

    下载包

     例如

    3.1:首先先要使用MOCk来模拟测试方法需要的参数,这一步为 Arrange;
        简单的模拟
          var mock = new Mock<Object>();
       模拟返回的数据
      mock .Setup(x => x.方法(It.IsAny<string>()(备注这里是模拟的方法参数))).Returns(Task.FromResult(这个方法会返回的参数));
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020042810512498.png)
      
    3.2:在模拟完请求参数后就要开始调用测试的方法了(ACT),传入测试方法需要的相应参数 
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200428113817151.png)
    简单的对返回参数进行判断
         Assert.True(httpClientInvoked);
    Assert里有很多种判断方法,可以自己慢慢看
    
     判断测试方法里的子方法是否被调用,下面的方法是判断是否至少执行一次
     mock(模拟方法名).Verify(fake => fake.AddAsync(It.IsAny<EvaluationEntity>()), Times.AtLeastOnce());
     ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200428114334530.png)
    
    最后再说一下如果测试的方法里需要抛出错误怎么判断,由于会抛异常所有要写在一起
     //Act & Assert
            var ex = await Assert.ThrowsAsync<HFQInternalServerException>(async () => await srv.CommentAsync("tran1", "1", "1", "admin", "305", "测试留言"));
            Assert.Equal(ErrorMessages.RemarkSubmitError.ToString(), ex.Code);
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200428114442581.png)

     ,单元测试永远都只关注需要测试的方法内部的逻辑实现,至于外部依赖方法的测试,则应该放在另一个专门针对这个方法的单元测试用例中。弄清楚这个问题,我们才能更加理解另一个单元测试不可缺少的框架——Mock框架,在我们写的测试中,应该忽略外部依赖具体的实现,而是通过模拟该接口方法来显示的指定返回值,从而降低该返回值对于当前单元测试结果的影响,而 Mock 框架(例如最常用的Moq),刚好可以满足我们对于接口的模拟需求。

    参考文章 https://www.cnblogs.com/xboo/p/11811838.html

    其他

    using Auth.Application.IService;
    using Auth.Application.Service;
    using Auth.Model;
    using Auth.Model.ViewModel;
    using Auth.UI;
    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.TestHost;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using Moq;
    using System;
    using System.Collections.Generic;
    
    namespace UnitTest
    {
        [TestClass]
        public class UnitTest1
        {
            private IUserService _controller;
            [TestMethod]
            public void TestMethod1()
            {
    
                var server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup<Startup>());
    
                _controller = server.Host.Services.GetService<IUserService>();
    
                var ss = _controller.UserList(1,10).Result.Item1;
    
    
    
    
    
    
    #if DEBUG
                //创建一个计时器,用来记录程序的运行时间
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                sw.Start();//开始计时
    
                //var search1 = await _elasticsearch.QueryAsync(KeyWord, pageIndex, pageSize);
    
                sw.Stop();//结束计时
                var time = sw.Elapsed;
    #endif
    
                Assert.IsTrue(true);
                //Assert.AreEqual(true,true);
            }
        }
    }

    参考

    https://www.cnblogs.com/yubaolee/archive/2018/07/07/DotNetCoreUnitTest.html

  • 相关阅读:
    文章评论:级数中达朗贝尔判别法和柯西判别法之间的关系研究 By 彭军
    解析函数论 Page 22 达朗贝尔判别法 VS 柯西判别法
    解析函數論 Page 28 連續復變函數的最簡單的性質
    #2066:一个人的旅行(Dijkstra算法入门题)
    #2072 单词数(字符串流使用)
    传统的DOM渲染方式 吴小明
    【闭包】closure 吴小明
    报文 吴小明
    节流和防抖 吴小明
    什么是模块化?它有什么好处?常用的模块化开发的方案 吴小明
  • 原文地址:https://www.cnblogs.com/netlock/p/13927191.html
Copyright © 2020-2023  润新知