(四)VS2005 Team Suite 轻松搞定白盒测试

发表于:2007-7-23 14:54  作者:俞戴龙   来源:51testing投稿

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 单元测试 VSTS

四、 “附加测试属性”的实践
        在Form1Test.cs中有这么一个功能,这又是VSTS单元测试之强大的地方。
我们可以点开它,点开后我们看到如下的代码:
        #region 附加测试属性
        //编写测试时,可使用以下附加属性:
        //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //使用 TestInitialize 在运行每个测试前先运行代码
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //使用 TestCleanup 在运行完每个测试后运行代码
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        #endregion
        这是干什么的呢?呵呵,其实它已经说的很明白了,这是“附加测试属性”。默认都是被注释掉的,只要我们取消注释就可以使用了。具体的属性有:[ClassInitialize()]、[ClassCleanup()]、[TestInitialize()]、[TestCleanup()]。他们的作用在它们上面的注释里都已经讲的很明白了,笔者在这里就不展开叙述了。
        微软之所以加进来这么个功能,以我之所见,是为了加大测试的灵活性。
        我举一例,大家就会看得很明白:现在我们打算把测试报告输出到外部文档去,这样方便日后的缺陷跟踪。可以修改代码如下:
        #region 附加测试属性
        //编写测试时,可使用以下附加属性:
        //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
        [ClassInitialize()]
        public static void MyClassInitialize(TestContext testContext)
        {
            StreamWriter m_streamWriter = new StreamWriter(@"C:\log.txt", true); 
            m_streamWriter.Write("Test Time,");
            m_streamWriter.WriteLine(DateTime.Now);
            m_streamWriter.Flush();
            m_streamWriter.Close();
        }
        //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
        [ClassCleanup()]
        public static void MyClassCleanup()
        {
            StreamWriter m_streamWriter = new StreamWriter(@"C:\log.txt", true);
            m_streamWriter.WriteLine("");
            m_streamWriter.Write("Total Passed:,");
            m_streamWriter.WriteLine(Convert.ToString(Passed) + ",");
            m_streamWriter.Write("Total NotPassed:,");
            m_streamWriter.WriteLine(Convert.ToString(NotPassed) + ",");
            m_streamWriter.Flush();
            m_streamWriter.Close();
        }
        //使用 TestInitialize 在运行每个测试前先运行代码
        [TestInitialize()]
        public void MyTestInitialize()
        {
            StreamWriter m_streamWriter = new StreamWriter(@"C:\log.txt", true);
            if (actual == expected)
            {
                m_streamWriter.WriteLine("Test Passed");
                Passed++;
            }
            else
            {
                m_streamWriter.Write("Test NotPassed,");
                m_streamWriter.Write("Input X:,");
                m_streamWriter.Write(Convert.ToString(x) + ",");
                m_streamWriter.Write("Input Y:,");
                m_streamWriter.Write(Convert.ToString(y) + ",");
                m_streamWriter.Write("Expected:,");
                m_streamWriter.Write(Convert.ToString(expected) + ",");
                m_streamWriter.Write("Actual:,");
                m_streamWriter.Write(Convert.ToString(actual));
                m_streamWriter.WriteLine("");
                NotPassed++;
            }
            m_streamWriter.Flush();
            m_streamWriter.Close();
        }
        //使用 TestCleanup 在运行完每个测试后运行代码
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        #endregion
同时引用:using System.IO;
申明变量:static int Passed=0;
        static int NotPassed=0;
        static double expected;
        static double actual;
        static char x;
        static int y;
并且把测试用例里的对于x、y、actual、expected的申明删除
        这时候我们再点击进行测试后,就会在c:\下面生成log.txt,内容如下:
Test Time,2007-7-7 23:29:57
Test Passed
Test NotPassed,Input X:,B,Input Y:,3,Expected:,1.31,Actual:,1.32
Test Passed
Test NotPassed,Input X:,A,Input Y:,0,Expected:,8.88,Actual:,2.88
Test Passed

Total Passed:,3,
Total NotPassed:,2,
        可能大家在以上文本或者代码中感到奇怪:为什么要加进去那么多的逗号?
        原因在此:把log.txt更名为log.csv,那么,就可以用excel来打开它(如下表):

             

        这样清晰多了吧?而且更加易于维护
        笔者在这里只是拿外部文件的输出作为一个例子,“附加测试属性”的其它有意义的用途欢迎大家共同探讨

结束语
        VSTS的单元测试的功能之强大由此可见一斑,本人更希望以此文能召唤起更多的国内公司能更加重视软件测试,更加规范软件测试,把我国的软件测试行业做强、做精!


参考文献:
①郑人杰.计算机软件测试技术.清化大学出版社,1990.
②古乐.软件测试技术概论.清化大学出版社,2004.

 

版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们


评 论

  • 夜星灵 (2012-4-13 11:52:25)

    受教啦,谢谢楼主

  • tangtangwahaha (2008-12-03 17:11:52)

    很不错

  • kalana (2008-3-31 20:39:24)

    受益匪浅,谢谢楼主,给我很大启发哈~~

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海信义律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2021, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道