没事儿就学习(4):简单的C#的单元测试
今天有一位同学由于时间不够让我帮忙做一下C#单元测试的例子,我思考了一下我好像也不会呐,那没事儿就学学这么折腾这玩意吧。由于我的同学很贴心的给了我一个她做的PPT,里面有一些收集到的概念,既然有好东西那么还是要用一下的。
单元测试概念
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。其中,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。其实说白了就是测试函数写的对不对,使用几组数据测试一下输入和输出的结果是不是和要求相一致。
C#的单元测试
微软大大还是非常的贴心的,给我们在开发环境中已经准备好了测试工具,我们可以先来试一试这东西要怎么用起来。
(1)首先新建一个C#控制台应用程序(无所谓了,只要能写代码的项目类型都可以,只是这玩意简单一点)
(2)完成后我们先写一个函数用于后续的测试,记住把Program类的可访问权限设置为public,然后写一个超级简单的函数Minus,做减法运算。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace UnitTestDemo
{public class Program{static void Main(string[] args){}static public double Minus(double num_1, double num_2) {return num_1 - num_2;}}
}
(3)在完成被测函数的编写后,我们在解决方案管理器中新建一个单元测试项目UnitTestProject。
(4)将UnitTestDemo项目引入至测试项目中,即为UnitTestProject添加引用,使其可以使用UnitTestDemo命名空间下的函数进行单元测试。
(5)在单元测试项目中编写如下代码,进行Minus函数的正确性检测。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using UnitTestDemo;namespace UnitTestProject1
{[TestClass]public class UnitTest1{[TestMethod]public void TestMinus(){double num_1 = 32.123;double num_2 = 11.123;Assert.AreEqual(Program.Minus(num_1, num_2), 21);}}
}
(6)点击【测试】->【窗口】->【测试资源管理器】,打开测试资源管理器后点击【生成】->【生成UnitTestProject】完成对测试函数的构建。此时显示TestMinus函数未运行测试。
(7)右击该函数,点击【运行选定的测试】按钮进行单元测试,本次测试中输入参数为32.123,11.123相减等于21,因此测试会被通过。Assert.Equal函数表示判断两值是否相等,相等则通过测试,否则不通过测试。
(8)此时,将代码中结果的21修改为任意其他的数值,比如改成0,再次运行该测试,显示为不通过。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using UnitTestDemo;namespace UnitTestProject1
{[TestClass]public class UnitTest1{[TestMethod]public void TestMinus(){double num_1 = 32.123;double num_2 = 11.123;Assert.AreEqual(Program.Minus(num_1, num_2), 0);}}
}
Assert类的使用
Assert类中存放了很多用于测试的静态方法,我们一个个进行分析。
(1)Assert.AreEqual():用于判断两个变量的值是否相等,如果相等则通过,反之则不通过。
(2)Assert.AreNotEqual():用于判断两个变量的值是否不相等,如果不相等则通过,反之则不通过。
(3)Assert.AreSame():用于判断两个对象是否相同,如果相同则通过,反之则不通过。
(4)Assert.AreNotSame():用于判断两个对象是否不相同,如果不相同则通过,反之则不通过。
(5)Assert.Fail():断言失败,即遇到这条语句测试直接失败,emmm......
(6)Assert.Inconclusive():无法被验证,即遇到这条语句表示无法判断通过与不通过,于是跳过,emmm.......
(7)Assert.IsFalse():用于判断对象结果是否为false,可以用于断定bool型返回的函数。
(8)Assert.IsFalse():用于判断对象结果是否为true,可以用于断定bool型返回的函数。
(9)Assert.IsInstanceOfType():用于判断某个对象是否是某个类型,可以判定继承关系,即子类的类型可以被判定为父类。
(10)Assert.IsNotInstanceOfType():用于判断某个对象是否不是某个类型,可以判定继承关系,即子类的类型可以被判定为父类。
(11)Assert.IsNull():用于判断某个对象是否为null。
(12)Assert.IsNotNull():用于判断某个对象是否不为null。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sort;namespace UnitTestProject1
{[TestClass]public class ProgramTest{[TestMethod]public void AddTest(){int a = 0;int b = 10;Assert.AreEqual(Program.Add(a, b), 10);}[TestMethod]public void WrongAddTest(){int a = 0;int b = 10;Assert.AreEqual(Program.Add(a, b), 30);}[TestMethod]public void ClassTest(){SortFunction sf1 = new SortFunction();SortFunction sf2 = new SortFunction();Assert.AreSame(sf1, sf1);}[TestMethod]public void WrongClassTest(){SortFunction sf1 = new SortFunction();SortFunction sf2 = new SortFunction();Assert.AreNotSame(sf1, sf2);}[TestMethod]public void FailTest(){Assert.Fail("errormessage");}[TestMethod]public void Inconclusive(){Assert.Inconclusive("errormessage");}[TestMethod]public void BooleanTest(){Assert.IsFalse(false);}[TestMethod]public void WrongBooleanTest(){Assert.IsTrue(false);}[TestMethod]public void InstanceofTypeTest(){SortFunction sf1 = new SortFunction();Assert.IsInstanceOfType(sf1, sf1.GetType());}[TestMethod]public void WrongInstanceofTypeTest(){SortFunction sf1 = new SortFunction();double px = 1;Assert.IsInstanceOfType(sf1, px.GetType());}[TestMethod]public void InheritTypeTest(){ShellSort shellSort = new ShellSort();SortFunction sortFunction = new SortFunction();Assert.IsInstanceOfType(shellSort, sortFunction.GetType());}[TestMethod]public void WrongInheritTypeTest(){ShellSort shellSort = new ShellSort();SortFunction sortFunction = new SortFunction();Assert.IsNotInstanceOfType(shellSort, sortFunction.GetType());}[TestMethod]public void NullTest(){Assert.IsNull(null);}[TestMethod]public void NotNullTest(){Assert.IsNotNull(null);}}
}
测试结果如下图所示。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
