使用VisualStudio进行单元测试之三
私有方法需不需要测试,本文不做讨论。假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试。
- 准备测试代码
private static int Div( int a, int b) { return a / b; }
- 创建测试方法
/// <summary> ///A test for Div ///</summary> [ TestMethod()] [ DeploymentItem("ConsoleApplication1.exe" )] public void DivTest() { int a = 1; // TODO: Initialize to an appropriate value int b = 1; // TODO: Initialize to an appropriate value int expected = 1; // TODO: Initialize to an appropriate value int actual; actual = Mathmatics_Accessor .Div(a, b); Assert.AreEqual(expected, actual); Assert.Inconclusive( "Verify the correctness of this test method." ); }
上面是我们创建的测试方法,现在我们就来分析一下这段代码。
首先是DeploymentItem特性,MSDN的解释是:指定应具有在运行测试之前的程序集一起部署的文件或目录。 附加此属性设置为测试选件类或测试方法。 可以使用多个实例。
然后是Mathmatics_Accessor ,从命名上就可以看出,这是Mathmatics的一个访问器,可以让我们忽略私有方法的访问控制。其它就与我们前面提到的单元测试没什么区别了。
- 在Visual Studio 2012中测试私有方法
/// <summary> ///A test for Div ///</summary> [ TestMethod()] public void DivTest2() { int a = 1; // TODO: Initialize to an appropriate value int b = 1; // TODO: Initialize to an appropriate value int expected = 1; // TODO: Initialize to an appropriate value int actual = a / b; Type t = typeof(ConsoleApplication1 .Mathmatics); MethodInfo method = t.GetMethod( "Div", BindingFlags .NonPublic | BindingFlags. Static); object[] oa = { a, b }; actual = Convert .ToInt32(method. Invoke(t, oa)); Assert.AreEqual(expected, actual); //Assert.Inconclusive("Verify the correctness of this test method."); }
这里所使用的反射的代码也非常简单,就不再做解释了。
关于如何对私有方法进行单元测试,就写到这里了。后面还将继续介绍一下Visual Studio测试工具的其他内容。
http://bigman.pw