单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
xUnit 是一个适用于 .NET 的免费、开源、面向社区的单元测试工具。xUnit.net 由 NUnit v2 的原发明者编写,是针对单元测试 .NET 应用的最新技术。xUnit.net 适用于 ReSharper、CodeRush、TestDriven.NET 和 Xamarin。它是 .NET Foundation 的项目,并在其行为准则下运行。
可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。
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;
}
这里用到了一个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);
}
[TestMethod]
public void Test_QuestionInsert()
{
//MongoHelper.RigisterConventions();
//var num = new Random().Next(100000, 1000000);
//new QuestionBll().Insert(new QuestionForAdd
//{
// AnswerValue = new Random().Next(1, 5),
// CategoryId = "57ecd3aa3a19a5287ccaa7f0",
// Title = "题目题目题目" + num++,
// Options = new List<AnsQuestionOptions>
// {
// new AnsQuestionOptions {Img = null, Text = "选项选项选项" + num++, Value = 1},
// new AnsQuestionOptions {Img = null, Text = "选项选项选项" + num++, Value = 2},
// new AnsQuestionOptions {Img = null, Text = "选项选项选项" + num++, Value = 3},
// new AnsQuestionOptions {Img = null, Text = "选项选项选项" + num, Value = 4}
// },
// Type = QuestionType.DoubleText
//});
}