zoukankan      html  css  js  c++  java
  • 单元测试:Nunit(三)

         第二部分中提到用XML文件保存测试的案例数据,然后在程序中可以一次性的读取数据,而不需要为每一种可能的数据集合写一个Case。首先,需要定义一个XML的文件,下面是我定义的一个XML文件(CaseFile.xml)。

    代码
    <?xml version="1.0" encoding="utf-8" ?>
    <Nums>
      
    <NumCase>
        
    <Excepted>10</Excepted>
        
    <NumArr>10,9,8,7,6,-2,-2</NumArr>
      
    </NumCase>
      
    <NumCase>
        
    <Excepted>-2</Excepted>
        
    <NumArr>-12,-3,-6,-2,-5,-8,-11</NumArr>
      
    </NumCase>
      
    <NumCase>
        
    <Excepted>5</Excepted>
        
    <NumArr>5,5,5,5</NumArr>
      
    </NumCase>
    </Nums>

         那么,下面的任务就是在程序中写一个Test Case来测试是否正确。废话不多说了,直接看代码吧。

    代码
     [Test]
            
    public void TestGetLargest5()
            {
                XmlTextReader xmlReader 
    = null;
                
    if (File.Exists("CaseFile.xml")) //读取XML文件
                  {
                    xmlReader 
    = new XmlTextReader("CaseFile.xml");
                }
                
    if (null == xmlReader) return;
                
    try
                {
                    
    int excepted = 0;
                    
    while (xmlReader.Read()) //循环读取子节点
                    {
                        List
    <int> numList = new List<int>();
                        
    if (xmlReader.NodeType == XmlNodeType.Element)
                        {
                            
    if (xmlReader.Name == "Excepted"//找到Excepted节点
                            {
                                excepted 
    = Convert.ToInt32(xmlReader.ReadElementString().Trim());
                            }
                            
    else if (xmlReader.Name == "NumArr"//找到NumArr节点
                            {
                                String tempNumArr 
    = xmlReader.ReadElementString().Trim();
                                
    foreach (string s in tempNumArr.Split(','))
                                {
                                    numList.Add(Convert.ToInt32(s));
                                }

                                
    int[] numArr = numList.ToArray();

                                
    int result = largest.GetLargest(numArr); //调用第二部分中的主程序

                                Assert.AreEqual(excepted, result); 
    //断言比较
                            }
                        }
                    }
                }
                
    catch(Exception ex)
                {
                    Console.WriteLine(ex.Message.ToString());
                }
                
    finally 
                {
                    
    if (null != xmlReader)
                    {
                        xmlReader.Close(); 
    //读取文件的最后不要忘记关闭
                    }
                }
            }

        代码本身并不难,主要是要体会在Nunit中常用这种将测试中会用到的多组数据保存在XML或是文本之类的文件中来减少代码的重复性。如果你说,不用XML或是文本而是用像Access或是SQL来保存数据呢,既然这样,那下一部分就针对最常见的CRUD说说数据库的Nunit测试.

  • 相关阅读:
    MySQL数据类型与操作
    MySQL 初识
    python中的线程
    python中的进程
    python中基于tcp协议与udp的通信(数据传输)
    字符串str.format()方法的个人整理
    进度条打印函数
    套接字错误搜集
    正则表达式 整理(w s d 点 贪婪匹配 非贪婪匹配 * + ? {} | [] ^ $  单词边界 分组、re.findall()、re.split()、re.search()、re.match()、re.compile()、re.sub())
    软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)
  • 原文地址:https://www.cnblogs.com/wangyong/p/1688646.html
Copyright © 2011-2022 走看看