51Testing软件测试论坛

标题: VS2005 Team Suite 轻松搞定白盒测试 [打印本页]

作者: crategev    时间: 2008-8-21 14:41
标题: VS2005 Team Suite 轻松搞定白盒测试
四、 “附加测试属性”的实践
        在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()]。他们的作用在它们上面的注释里都已经讲的很明白了,笔者在
这里就不展开叙述了。
        微软之所以加进来这么个功能,以我之所见,是为了加大测试的灵活性。
我举一例,中国IT实验室大家就会看得很明白:现在我
们打算把测试报告输出到外部文档去,这样方便日后的缺陷跟
踪。可以修改代码如下:
        #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的单元测试的功能之强大由此可见一斑,本人更希望以此文能召唤起更多的国内公司能更
加重视软件测试,更加规范软件测试,把我国的软件测试行业做强、做精!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2