.Net单元测试框架: moq
如果项目目的Internal方法需要再单元测试项目中引用到测试,由于默认情况下,Internal只能在同一程序集中引用,这种情况下需要在AssemblyInfo.cs中添加 “[assembly: InternalsVisibleTo(“UnitTest项目名称”)]” 使得Internal类型和方法在项目之外的单元测试项目中也可以访问到
单元测试类或方法的DeploymentItemAttribute特性:指定随着运行单元测试一起部署的目录或文件,比如
[DeploymentItem(“sysconfig.unittest.config”)]
[DeploymentItem(“sysconfig.testdebug.locator”)]
[TestClass] 或者[TestMethod]
……
[AssemlyInitialize] 定义单元测试的程序集运行时的初始方法,在[TestInitialize]之前运行, 比如: 在测试项目中建如下测试类,在里面建如下[AssemlyInitialize] 初始化方法:
[TestClass]
public class Startup
{
[AssemlyInitialize]
public static void MyTestInit(TestContext testContext)
{
TestConfigure.Initialize();
}
}
[ClassInitialize] :类似[AssemlyInitialize] 的作用,只是定义类的初始化方法
[TestInitialize]在测试类中指定每次单元测试方法运行之前都运行的“初始方法”(有2个DataRow或者带回2组测试参数DynamicData的单元测试方法2次运行前也都会2次分别先运行“初始方法”)
与以上3、4、5相对应的有[TestCleanup]、[ClassCleanup]、[AssemblyCleanup],用于测试方法执行之后执行,比如释放资源等操作
[Ignore]定义不执行的测试方法,比如临时未能跑通的测试方法暂时保存时很有用,而不用注释掉代码
结合多组参数数据对单元测试方法进行测试:
[DataTestMethod]
[DataRow(1,2,…,N)]
…带参数的单元测试方法
预料执行会抛出指定的异常的单元测试方法,(默认参数下AllowDerivedTypes = false,抛出“预料异常类的子类”不视为“预料异常”)
[ExpectedException(typeof(Exception类) , AllowDerivedTypes = false)]
……单元测试方法
也可以不通过特性,而通过Assert.ThrowsException<Exception类>(Action或Func)来预料执行会抛出指定的异常的单元测试方法
使用[DynamicData] 结合返回值的静态方法或属性,进行多种组合的参数化测试
比如: