单元测试是一种编程测试,这些测试既可以使用 Visual C# 或 Visual Basic 编写,也可以使用 Visual C++ 编写并用 /clr:safe 选项进行编译。
单元测试用于通过直接调用某个类的方法(传递相应参数)来执行其他源代码。因此,如果包括 Assert 语句,它们可以根据所期望的值来测试实际生成的值。单元测试方法位于测试类中,测试类则存储在源代码文件中。
可以使用能够创建测试的初始源代码的代码生成功能来创建单元测试,也可以完全手动编写测试。无论使用何种方式,测试类和所有测试方法都用编程属性加以标识。
用 [TestClass()] 属性标记每个测试类。每个单元测试都是一个使用 [TestMethod()] 属性标记的测试方法。这些属性是在生成单元测试时自动分配的;如果是手动编写单元测试代码,则必须自行添加类和方法的属性。
测试异常可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。
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");
}
测试返回值
这里用到了一个LastCall的一个类,比较常用,一些辅助测试的功能,都在该类中。
[Test]
public void Valid_Return()
{
MockRepository mock = new MockRepository();
var log = mock.DynamicMock();
using (mock.Record())
{
log.WriteLog("admin");
LastCall.Return(0);
}
var returnValue = log.WriteLog("admin");
Assert.AreEqual(returnValue, 0);
}