使用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中测试私有方法
在Visual Studio 2010中可以按照上面的方法来进行测试,但是在Visual Studio 2012中却不再支持直接测试私有方法了,据说是因为微软认为这不是最佳的实践。所以,我们只好自己想办法来实现了。一种奇葩一点儿的方法,直接把private换成public,然后再来测试,嘿嘿。正常一点儿,使用反射来实现在测试方法中对私有方法的调用。
 
        
        /// <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测试工具的其他内容。
posted @ 2013-09-24 14:48  BigMan85  阅读(246)  评论(0编辑  收藏  举报