.Net单元测试的方法
.Net单元测试的方法单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节。也是唯一需要编写代码才能进行测试的一种测试方法。在标准的开发过程中,单元测试的代码与实际程序的代码具有同等的重要性。每一个单元测试,都是用来定向测试其所对应的一个单元的数据是否正确。
一、单元测试具有一下几个好处
(2)、输入的实际参数与形式参数的属性是否匹配;
(3)、输入的实际参数与形式参数的量纲是否一致;
(4)、调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
(5)、调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
(6)、调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
(7)、 调用预定义函数时所用参数的个数、属性和次序是否正确;
(8)、是否存在与当前入口点无关的参数引用;
(9)、是否修改了只读型参数;
(10)、对全程变量的定义各模块是否一致;
(11)、是否把某些约束作为参数传递。
(13)、是否处理了文件尾;
(14)、是否处理了输入/输出错误;
(15)、输出信息中是否有文字性错误;
(2)、变量无初值;
(3)、变量初始化或省缺值有错;
(4)、不正确的变量名(拼错或不正确地截断);
(5)、出现上溢、下溢和地址异常。
(2)、混合类型运算;
(3)、变量初值错;
(4)、精度不够;
(5)、表达式符号错。
(7)、错误地使用逻辑运算符或优先级;
(8)、因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
(9)、比较运算或变量出错;
(10)、循环终止条件或不可能出现;
(2)、记录的错误与实际遇到的错误不相符;
(3)、在程序自定义的出错处理段运行之前,系统已介入;
(4)、异常处理不当;
(5)、错误陈述中未能提供足够的定位出错信息。
public bool Valid(string userName, string passWord)
{
if (string.IsNullOrEmpty(userName)) throw new ArgumentNullException("userName is null");
var isValid = userName == "admin" && passWord == "123456";
Log.Write(userName);
return isValid;
}
测试代码如下
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void Vaild_Throw_Test()
{
MyLogin l = new MyLogin();
l.Valid("", "123456");
}
这里需要特性“ExpectedException”,意思是期待抛出一个异常。这里不需要再进行断言了,抛出异常后,后面的代码也就不会执行了。
2.测试返回值
这里主要讲测试模拟对象的返回值。这里用到了一个LastCall的一个类,比较常用,一些辅助测试的功能,都在该类中。
测试代码如下
[Test]
public void Valid_Return()
{
MockRepository mock = new MockRepository();
var log = mock.DynamicMock<ILog>();
using (mock.Record())
{
log.WriteLog("admin");
LastCall.Return(0);
}
var returnValue = log.WriteLog("admin");
Assert.AreEqual(returnValue, 0);
}
3.测试模拟对象的参数传递
当调用模拟对象时,可能需要传递参数,如果参数的值不一至时,会导致测试失败,比如:我需要传递一个字符串,其中包含了一个GUID+UserName,这里GUID可能我们无法模拟,所以,测试参数时,只需要测试UserName就可以。
方法代码如下:
public bool Valid_Paramter(string userName, string passWord)
{
Log.Write(Guid.NewGuid() + userName);
return userName == "admin" && passWord == "123456";
}
测试代码如下:
[Test]
public void Valid_Paramter()
{
MockRepository mock = new MockRepository();
var log = mock.DynamicMock<ILog>();
using (mock.Record())
{
log.Write("admin");
LastCall.Constraints(Rhino.Mocks.Constraints.Text.Contains("admin"));
}
MyLogin login = new MyLogin();
login.Log = log;
var valid = login.Valid_Paramter("admin", "123456");
Assert.AreEqual(valid, true);
mock.VerifyAll();
}