单元测试(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//});}