C#测试

1. 从被测试的代码中生成单元测试

1.1创建C#控制台程序,命名为AddUnitText

1.2然后先用一小段很简单的代码练习一下

 1  class Program
 2     {
 3         public int Add(int a, int b)
 4         {
 5             return a + b;
 6         }
 7         static void Main(string[] args)
 8         {
 9         }
10     }

1.3然后用下面的步骤创建单元测试

(1)在Add方法体中,在右击菜单中选择创建单元测试,并为这个方法创建单元测试代码的基本框架

(2)点击确定后,系统自动生成单元测试代码,如下所示

 1 namespace AddText
 2 {
 3     /// <summary>
 4     ///这是 ProgramTest 的测试类,旨在
 5     ///包含所有 ProgramTest 单元测试
 6     ///</summary>
 7     [TestClass()]
 8     public class ProgramTest
 9     {
10
11
12         private TestContext testContextInstance;
13
14         /// <summary>
15         ///获取或设置测试上下文,上下文提供
16         ///有关当前测试运行及其功能的信息。
17         ///</summary>
18         public TestContext TestContext
19         {
20             get
21             {
22                 return testContextInstance;
23             }
24             set
25             {
26                 testContextInstance = value;
27             }
28         }
29
30         #region 附加测试特性
31         //
32         //编写测试时,还可使用以下特性:
33         //
34         //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
35         //[ClassInitialize()]
36         //public static void MyClassInitialize(TestContext testContext)
37         //{
38         //}
39         //
40         //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
41         //[ClassCleanup()]
42         //public static void MyClassCleanup()
43         //{
44         //}
45         //
46         //使用 TestInitialize 在运行每个测试前先运行代码
47         //[TestInitialize()]
48         //public void MyTestInitialize()
49         //{
50         //}
51         //
52         //使用 TestCleanup 在运行完每个测试后运行代码
53         //[TestCleanup()]
54         //public void MyTestCleanup()
55         //{
56         //}
57         //
58         #endregion
59
60
61         /// <summary>
62         ///Add 的测试
63         ///</summary>
64         [TestMethod()]
65         public void AddTest()
66         {
67             Program target = new Program(); // TODO: 初始化为适当的值
68             int a = 0; // TODO: 初始化为适当的值
69             int b = 0; // TODO: 初始化为适当的值
70             int expected = 0; // TODO: 初始化为适当的值
71             int actual;
72             actual = target.Add(a, b);
73             Assert.AreEqual(expected, actual);
74             Assert.Inconclusive("验证此测试方法的正确性。");
75         }
76     }
77 }

(3) ProgramTest.cs代码文件详讲

[TestMethod()]:说明了以下代码是一个测试用例

Int a = o; // TODO: 初始化为适当的值

int b = 0; // TODO: 初始化为适当的值

这两句是被测函数的输入参数,需要我们去修改它的值,也就是我们输入测试用例的地方。

double expected = 0; // TODO: 初始化为适当的值

double actual;

这两句话浅显易懂,前一句话是定义了期望值和对它进行初始化,后一句话是定义了实际值。默认

Assert.AreEqual(expected, actual);

Assert在这里可以理解成断言:在VSTS里做单元测试是基于断言的测试。

默认代码中Assert.Inconclusive 表明这是一个未经验证的单元测试。在实际的程序中可以注释掉。

(4)还可以在C#项目中自行创建单元测试项目,然后编写测试方法

单元测试的基本方法是调用被测代码的函数,输入函数的参数值,获取返回结果,然后与预期测试结果进行比较,如果相等则认为测试通过,否则认为测试不通过。

1、Assert类的使用

Assert.Inconclusive()    表示一个未验证的测试;

Assert.AreEqual()         测试指定的值是否相等,如果相等,则测试通过;

AreSame()            用于验证指定的两个对象变量是指向相同的对象,否则认为是错误

AreNotSame()        用于验证指定的两个对象变量是指向不同的对象,否则认为是错误

Assert.IsTrue()              测试指定的条件是否为True,如果为True,则测试通过;

Assert.IsFalse()             测试指定的条件是否为False,如果为False,则测试通过;

Assert.IsNull()               测试指定的对象是否为空引用,如果为空,则测试通过;

Assert.IsNotNull()          测试指定的对象是否为非空,如果不为空,则测试通过;

2、CollectionAssert类的使用

用于验证对象集合是否满足条件

StringAssert类的使用

用于比较字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

3、附加测试属性的使用

默认都是被注释掉的,只要我们取消注释就可以使用了。这个功能的加入,很大程度上是为了增加测试的灵活性。具体的属性有:

[ClassInitialize()]在运行类的第一个测试前先运行代码

[ClassCleanup()]在运行完类中的所有测试后再运行代码

[TestInitialize()]在运行每个测试前先运行代码

[TestCleanup()]在运行完每个测试后运行代码

4、测试单元NUnit 声明

1.AreEqual

Assert.AreEqual(expected,actual[,string message])

//判断结果与预期是否相等

报告的结果如下:

Assert.AreEqia;(expected,actual,tolerance[,string message])

2.IsNull

Assert.IsNull(object [, string message]) 
    Assert.IsNotNull(object [, string message])

声明给的对象是否属于空

3.AreSame

Assert.AreSame(expected, actual [, string message])

声明是否同类型

4.IsTrue

Assert.IsTrue(bool condition [, string message])

判断返回条件是否为真

5.Fail

Assert.Fail([string message])

测试立即失败。

2.1这是测试代码:

查找list[]中的最大值:int Largest(int list[], int length);

首份实现代码如下:

int Largest(int list[], int length)

{

int i,max;

for(i = 0; i < (length – 1); i ++ )

{

if(list[i] > max)

{ max=list[i]; }

}

return max;

}

2.2编写程序:

 1 static void Main(string[] args)
 2         {
 3             int[] List = new int[3];//申明一个长度为3的数组保存录入的3个数
 4             int Max = 0;//保存最大值
 5             for (int i = 0; i < List.Length; i++)//循环数组
 6             {
 7                 Console.WriteLine("请输入第" + (i + 1) + "个数:");
 8                 List[i] = int.Parse(Console.ReadLine());//循环将录入的数字保存到数组
 9                 if (List[i] > Max)//判断当前数字是否大于最大值
10                 {
11                     Max = List[i];//将最大值赋值给Max
12                 }
13             }
14             Console.WriteLine("最大的数是:{0}",Max);//输出最大值
15             Console.ReadLine();
16         }

2.3在此测试的过程中发现无法对程序进行有效的测试,所以重新写了方法

 1 namespace MUnitText
 2 {
 3     public class LIU
 4     {
 5         /// <summary>
 6         /// 把返回的最大值放在list中
 7         /// </summary>
 8         /// <param name="list">一列整数</param>
 9         /// <returns>最大值返回给出的list中</returns>
10         public static int Largest(int[] list)
11         {
12             int i, max = Int32.MaxValue;
13             for (i = 0; i < list.Length - 1; i++)
14             {
15                 if (list[i] > max)
16                 {
17                     max = list[i];
18                 }
19             }
20             return max;
21         }
22     }
23 }

2.4创建单元测试

测试了多组数据

给一列数字[7,8,9].这个方法返回9.这是很符合常理的一个测试用例。

下面给出测试思想。

[7,8,9]—>9

[8,9,7]—>9

[9,7,8]—>9

当有重复的最大的数字时候将会发生什么?

[7,9,8,9]—>9

因为只存在int类型,没有objects类型,所以你可能不会关系9返回的是什么类型。

那么当只有1个数字的时候,它将会是什么?

[1]—>1

并且当出现负数时候又会发生什么情况:

[-9,-8,-7]—>-7

可以很很简单的看出来-7比-9大。

2.5编写测试方法

首先:通过Globally assembly cath调用using NUnit.Framework;

NUnit框架提供我们需要的单元测试的功能。

下一步,我们要定义一个类:每一个类包含着测试用例状态属性的注释。必须被声明为共有的,它必须有一个共有的,没有参数和构造器的。

最终,这个测试类包含单个带有测试属性的测试方法。

 1  using NUnit.Framework;
 2
 3     [TestFixture]
 4
 5     public class TestSimple{
 6
 7         [Test]
 8
 9         public void LargestOf3(){
10
11             Assert.AreEqual(9,Cmp.Largest(new int[]{8,9,7}));
12
13             Assert.AreEqual(100,Cmp.Largest(new int[]{100,4,25}));
14
15             Assert.AreEqual(64,Cmp.Largest(new int[]{1,64,38}));
16
17         }
18
19     }
时间: 2024-10-05 21:05:48

C#测试的相关文章

iOS app打包 -- 生成ipa测试包 步骤详解

最近有小伙伴问我如何打成ipa包分发给测试人员 , 虽然现在网上的教程很多,但是也很杂, 没有一个比较完整的讲解. 利用工作之余, 就说一下如何生成ipa包?共分为两种方法. 第一种方法: 1) 至于配置发布证书和AdHoc描述文件, 就不再累述, 下载下来双击安装即可.(ps: 生成AdHoc描述文件的时候要注意勾选所有的设备, 只有被描述文件包含的设备才能进行相应的测试. 如果是企业账号的话则不需要添加设备的udid). 2) 接下来开始配置xCode里的工作(包括发布证书和描述文件), 注

Monkey测试

1             概述 Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 当Monkey程序在模拟器或真实设备运行的时候,程序会产生一定数量或一定时间内的随机模拟用户操作的事件, 如点击,按键,手势等, 以及一些系统级别的事件.通常也称随机测试或者稳定性测试. 2             测试步骤 2.1   测试前提条件 1.将手机恢复出厂设置 2.恢复出厂设置后,进入设置--

软件测试中的数据库测试

数据库中数据的基本结构 定义一:数据元素集合(也可称数据对象)中各元素的关系. 定义二:相互之间存在特定关系的数据元素集合. 一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多 字段(数据项)组成数据库测试分类系统测试.集成测试.单元测试.功能测试.性能测试.安全测试系统测试.数据库在初期设计中需要进行分析测试. 对于各种数据元素进行完美融合,并理清相互之间的关系便是数据库结构的基本定义. 在数据库中,不同数据之间会存在既定的特殊关系,其属于各种数据元素

一些基本LINUX命令以及测试环境的搭建

LINUX操作系统平时用的不多,资深测试与开发同学们用的比较多,像我这样的一个人,只喜欢WINDOWS操作系统.但LINUX操作系统也用过一段时间, 知道一些基本命令,如果不记得的话,就百度一下,拿来就用,也不会太难.下面记录一下自己知道的一些常用命令,方便自己查询,以供大家参考. 首先 LINUX系统的特点是:稳定,安全,开源,可裁剪性.(可裁剪性还真没有理解透) 其次:LINUX 有四个版本,分别是:DEBIAN,UBUNTU,RED HAT,CENTOS. 我只用过CENTOS版本,不过公

微信+WeTest:小程序云端测试系统上线

日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测试平台,由WeTest提供基础支持,下载"微信开发者工具"即可使用. 小程序测试报告示例:  一. 云真机测试 Beta 为了方便广大开发者检测小程序程序缺陷.评估小程序产品质量,微信提供了免费的云真机测试环境以及一整套测试方案.在小程序交付到真实用户手中使用之前,你可以将小程序分发到云真

微信公众号API测试——接口调用频率限制

接口频率限制[1] 公众号调用接口并不是无限制的.为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码: {"errcode":45009,"errmsg":"api freq out of limit"} 各接口调用频率限制如下: 接口 每日限额 获取access_token 2000 自定义菜单创建 1000 自定义菜单查询 10000 自定义菜

手把手教你如何搭建自己的渗透测试环境

介绍 白帽子是指个体发起的黑客攻击,找到系统潜在的可能被恶意黑客利用的的漏洞或脆弱点.在目标不知情或者没得到授权的情况下发起黑客攻击是非法的.所以通常是建立一个自己的实验室,练习黑客技术. 在这个实验室里,你能看到如何创建一个自己的黑客环境,练习各种各样的黑客攻击技术.我们将会探讨不同类型的虚拟系统,构建一个虚拟网络,在虚拟环境中运行试用版的操作系统,搭建一个有漏洞的web应用程序,安装Kali LInux,执行渗透测试. 所需条件: VMware Workstation Windows XP系

游戏测试经历的流程及发版本注意的问题(或许有遗漏)

一.测试流程: 1.测试人员需要参与需求会议,了解需求,如有必要,提出疑问点,产品修改正 2.需求确定后,编辑测试用例或者测试功能点 3.开发提交完毕后,执行测试用例(要求开发出电脑版,节约前期打包,安装包的时间) 4.发现bug,提交bug到禅道,并通知相关人员 5.开发组修正bug,禅道指派给测试人员,表明已修复 6.对已修正的bug,进行回归测试 7.修正完毕的bug在禅道上置为关闭 8.待电脑版功能验证完毕后,进行手机包测试 9.整体测试完毕,可以发布包 补充: 1.中途有修改需求,也需

1.2软件生命周期&amp;测试流程

软件的生命周期 可行性分析-需求分析-软件设计-软件编码-软件测试-软件维护 1.可行性分析 主要确定软件开发的目的和可行性(PM) 2.需求分析 对软件的功能进行详细的分析(PM),输出需求规格说明书(原型图) 3.软件设计(DEV) 把需求分析得到的结果转换为软件结构和数据结构,形成系统架构 概要设计:搭建架构.模块功能.接口连接和数据传输 详细设计:模块深入分析,对各模块组合进行分析,伪代码   包含数据库设计说明 4.软件编码(DEV) 可运行的程序代码 5.软件测试 5.1.单元测试(

第一个远程javaweb项目测试全过程

2017-5-20,在这个奇特的日子,我不再满足于在本地测试javaweb,于是在上腾讯云买了第一个云服务器,由于是学生认证,所以一个月只要10块钱,还是要抢的,每天早上9点开抢 打开后,发现其实是一个云主机,就是远程主机,只不过他可以给你一个公网ID,就是在浏览器输入公网ID的话,全国所有人都可以访问你的项目 关于怎么把自己的javaweb项目放到云主机,有一个教程http://www.cnblogs.com/diyunfei/p/6826557.html,前提是得先在云主机下载配置jkd,t