手动编写单元测试类和方法
参考了这位同学写的内容之后重新整理了一下,点击即可访问https://www.cnblogs.com/Look_Sun/p/4514732.html
-
创建项目
打开VS2015,新建一个项目。在这里我们默认新建一个控制台应用程序UnitTestDemo,并新建一个单元测试项目UnitTest。
新建后的项目格式如下:
-
添加方法
进入控制台项目的Program类,创建一个add方法
namespace UnitTestDemo { class Program { static int add(int a, int b) { return a + b; } static void Main(string[] args) { } } }
我们的主要任务就是测试add方法是否可以正常运行并返回正确结果
-
在单元测试项目UnitTest中引用控制台项目UnitTestDemo
引用完毕后项目结构如下:
-
双击UnitTest1.cs可以看到其默认生成的方法
可以看到 UnitTest1 具有一个 [TestClass] 特性,表明这是一个测试类。 TestMethod1 具有一个 [TestMethod] 特性,表明这是一个测试方法。
可以这样理解,一个方法必须具有 [TestMethod] 特性,且其所属的类具有 [TestClass] 特性,那么这个方法才会被VS承认为一个单元测试方法。
如果没有上面的两个特性中的一个,编译生成是没有任何问题的。但是VS不会把其作为一个单元测试方法。 -
如何理解“VS不把一个方法作为【单元测试方法】”
如下所示,打开测试资源管理器
可看到测试资源管理器显示如下:
测试资源管理器里面会显示当前解决方案里面的所有单元测试。说明白点就是这里只显示符合【一个方法必须具有 [TestMethod] 特性,且其所属的类具有 [TestClass] 特性】要求的方法。 -
那为什么上图里都没显示, [TestMethod] 特性和 [TestClass] 特性现在不是都有吗?原因是你还没有生成程序集。
*解决办法1:*网上说按F6,但是我实验过后没有效果
*解决办法2:*右击要测试的方法,点击运行测试,即可显示,如下所示:
-
在TestMethod1中加入要测试的内容:
但是会有报错,这里主要是因为没有使用Program对应的命名空间,于是我们在第三行加入using UnitTestDemo; ,又出现了新的错误
这个错误的解决办法是:将program类和add方法改为Public
-
重新运行测试,可得到以下结果:
如果失败的话,则如下所示:
-
Assert的用法
Assert.AreEqual() :测试指定的值是否相等,如果相等,则测试通过;
Assert.Inconclusive():表示一个未验证的测试;
Assert.IsTrue(): 测试指定的条件是否为True,如果为True,则测试通过;
Assert.IsFalse() :测试指定的条件是否为False,如果为False,则测试通过;
Assert.IsNull():测试指定的对象是否为空引用,如果为空,则测试通过;
Assert.IsNotNull():测试指定的对象是否为非空,如果不为空,则测试通过;