hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

net core WebApi——运用xUnits来完成单元测试

2019-11-18杂谈搜奇网47°c
A+ A-

目次

  • 媒介
  • 单元测试
  • xUnit
  • 小结
  • 附录

媒介

从最先敲代码到现在,不断地都是在喊着记得做测试,记得自测,测试职员打回来扣你money之类的,刚最先由于疼爱钱(固然照样为了代码质量),就老老实实本身写完本身跑一遍,没有流程没有计划没有测试文档,就是本身整顿一组数据跑一遍,末了依旧照样让测试职员老老实实把一大堆测试题目扔给你。

单元测试

起首,照样来聊聊为啥要搞测试吧。

  1. 测试有助于代码团体健壮性,掩盖测试、压力测试都是为了全方位多角度更快更好为用户服务。
  2. 测试有助于进步顺序猿的积极性以及引发本身的注重,毕竟一个坑栽一遍就够了,两次也能容忍,再三再四再五怕是要被搞,同时这也是自我进步的一种手腕吧。
  3. 软件开发流程扫尾的事情就是测试,绕不过,毕竟验收才是终究目标,到达效果才取得应有的。

好了,聊完这些,固然我也不是专业测试职员,一定不会给个测试文档模板,喏,照着这个范例起来,我主假如要鼓捣下我之前一向想尝尝的单元测试,这个自动化测试的手腕之一,一向想尝尝然则一向都放着。

MSTestNUnitxUint这三个中让我轻微犹疑了下,不过三七二十八管他呢,随意来个吧,就选了xUnit,固然MSTest是官方的,支撑度应当高点儿,然则这不是我们该犹疑选择的处所。

xUnit

起首,我们新建一个项目April.Test

Fact

新建以后,我们看到有个默许的 [Fact]

这个就是测试的规范花样了,假如我们不须要测试数据的话,就是在这个标签下的要领做断言,简朴举个例子吧。

        [Fact]
        public void TestEqual()
        {
            int a = 10, b = 20;
            Assert.Equal(30, Add(a, b));
        }

        private int Add(int a, int b)
        {
            return a + b;
        }

敲下Assert以后,发明断言很多要领,这里也就不一一说清楚明了,觉得要领名起的都挺邃晓的,这里就不过量形貌了,代码中也有些测试示例,地点在文末给出。

Theory

我们在上面的代码能够看到,一切的数据都是本身定好的,假如我想本身做参数传入测试怎么搞呢,这时刻就要用到 [Theory] 这个标签以及 [InlineData] 了,标签是为了更好的辨别要领的范例(个人明白),来看下这类参数通报的测试怎么搞吧。

        [Theory]
        [InlineData(new object[] { 1, 2, 3, 4 },1)]
        [InlineData(new object[] { "t", "e", "s", "t" }, "t")]
        public void TestContains(object[] objs,object obj)
        {
            Assert.Contains(obj, objs);
        }

固然我们也能够运用自定义数组来做测试数据源,这里我早先认为能够传恣意范例参数,然则MemberData只支撑object[]。

        [Theory]
        [MemberData(nameof(tempDatas))]
        public void TestData(int a, int b)
        {
            int result = a + b;
            Assert.True(result == Add(a, b));
        }
        
        public static IEnumerable<object[]> tempDatas
        {
            get
            {
                yield return new object[] { 1, 2 };
                yield return new object[] { 5, 7 };
                yield return new object[] { 12, 12 };
            }
        }

控制器

在之前鼓捣单元测试的时刻,我一向想一个题目,假如只是这类操纵的话,那测试有何意义,然则厥后发明,本来单元测试比我认为能做的多得多,所以,进修是个不断的路程,走的多了,景致也就多了。

这里能够引入一个流程,在我们测试本身的工程的时刻,我们须要三步来做完单个的测试。

  • Arrange(准备事情)
  • Act(完成要领)
  • Assert(断言效果)

在测试之前,我们须要在当前工程引入一个Moq,至于为什么用这个呢,就跟vue一样我们须要模仿(虽然说mock跟Moq还不是那末相似),总不可能我们单元测试引入了orm来实际操纵数据库吧(固然测试库这个也是可行的),所以我们须要模仿接口的完成类及要领。

引入完,我们将April.WebApi引入到当前工程,以后我们建立一个Values的接口测试类ValuesControllerTest,然后测试要领以下:

        [Fact]
        public void TestGet()
        {
            // Arrange
            var mockRepo = new Mock<IStudentService>();
            var controller = new ValuesController(mockRepo.Object);
            // Act
            var result = controller.Get();
            // Assert
            Assert.Equal(new string[] { "value1", "" }, result.Value);
        }

这里注意下,对应接口的要领我是都解释的,终究只要返回了字符串数组,由于对应接口中的要领都须要初始化,那末我们来测试下猎取数据的接口,看下这个Moq的用法吧,起首我们须要初始化Mock来完成对应接口,然后我们经由过程完成对应要领来模仿猎取数据。

        [Theory]
        [InlineData(1)]
        public void TestGetByID(int id)
        {
            var mockRepo = new Mock<IStudentService>();
            mockRepo.Setup(repo => repo.GetList(s => s.ID == 38).ToList())
                .Returns(GetList());

            var controller = new ValuesController(mockRepo.Object);

            var result = controller.Get(id);

            Assert.NotNull(result);
            Assert.Contains("大洛阳", result.Value);
        }

        private List<StudentEntity> GetList()
        {
            List<StudentEntity> entities = new List<StudentEntity>();

            entities.Add(new StudentEntity()
            {
                ID = 1,
                Name = "小明",
                Number = "123456",
                Age = 19,
                Sex = 1,
                Address = "大洛阳"
            });
            entities.Add(new StudentEntity()
            {
                ID = 2,
                Name = "小红",
                Number = "456789",
                Age = 18,
                Sex = 0,
                Address = "大洛阳"
            });

            return entities;
        }

写到这我发明,我在引入WebApi的时刻,彷佛已把几个工程都已引入进来,这个不知道适宜不适宜。

小结

写到这里,基本上单元测试这块儿也简朴了走了一遍,至于详细在营业中怎样完成,照样想着须要连系个小项目来实践下,东西走通个demo只能申明可行,走通差别体量的工程才申明可用,包含后续的集成测试,压力测试,自动化测试也会一点点儿的最先鼓捣,路漫漫啊。

附录

代码地点:April.WebApi

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
net core WebApi——运用xUnits来完成单元测试

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282366.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>