• 用Nunit测试通讯程序


        对于Nunit,我是个纯粹的新手,没想到,第一个练手的,居然是一个通讯程序。难度略微大了点。我的通讯程序是一个类似通讯服务器的程序,能够监听和维持多个连接,并实现向任意连接的收发数据。因为原来实现过类似的东西,这次做的步子又前进了一些,把整个服务器的这种工作模式抽象出来了,做成了一个与具体业务无关的通讯层。我只是按照自己的想法把代码写了出来,上层还有很多逻辑层代码,如果在原来,就得等全套代码都好了,才能开始进行测试和修改。不过,现在我有Nunit,更准确的说,是有了Testdriven.Net,终于可以实现这种“局部测试”了。
        为了测试,写了一个简单的终端模拟类,用来和服务器通讯。然后构造测试的代码,经过半天的摸索,终于差不多了,比较高兴。中间被卡了一段时间,后来把收和发都放到独立与测试程序的线程中,问题解决了。
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;
    using System.Threading;
    namespace ComServer.DA
    {
        
    /// <summary>
        
    /// connections的测试
        
    /// </summary>

        [TestFixture]
        
    public class Test_Connections
        
    {
            
    int cnt;
            Thread th;
            Thread th2;
            Test_SendClient ts;
            DateTime dt0;
            TimeSpan alltim;    
    //耗时

            
    public void mynoti(int typ, object[] args)
            
    {
                Console.WriteLine(DateTime.Now.ToString(
    "HH:mm:ss")+ args[1].ToString());
                cnt
    ++;
            }

            [SetUp]     
    //初始化,产生接收和发送方
            public void testsetup()
            
    {
                cnt 
    = 0;
                Connections cns 
    = new Connections(50085005003new Dele_ConnsNotify(mynoti), 437437);
                th 
    = new Thread(cns.StartListen);
                th.Start();

                ts 
    = new Test_SendClient();
                th2 
    = new Thread(ts.DoTest);
                th2.Start();
                
                dt0 
    =new DateTime();
                dt0 
    = DateTime.Now;
            }

            
    /// <summary>
            
    /// 测试仅仅发送的效果,在10秒内,如果收到5个包,则测试通过。
            
    /// </summary>

            [Test]
            
    public void t1()
            
    {
                alltim 
    = DateTime.Now - dt0;
                
    while (alltim.TotalSeconds < 10)
                
    {
                    Console.WriteLine(
    "time:" + alltim.ToString()+"\r\ncnt:"+cnt.ToString());
                    Thread.Sleep(
    1000);
                    alltim 
    = DateTime.Now - dt0;
                }

                Assert.AreEqual(cnt,
    5);
                Console.WriteLine(
    "测试(10s内收5个包)结束!");
            }

            [TearDown]
            
    public void t1teardown()
            
    {
                th.Abort();
                ts.Exit();
                th2.Abort();
            }

        }

    }

    几点心得:
        1。有时Testdriven.net的console输出不是很及时,该显示的却不显示,在Nunit GUI中基本上不会出问题。
        2。多线程的情况下,Nunit GUI关闭后,有个延时,估计是等待线程结束。
        3、Testdriven.net对于Nunit支持的很好,测试时,能够自动运行Test、Teardown等标签。不过我的右键菜单中的Nunit一会儿有一会儿没有,还没搞懂。
        4、Testdriven.net的debug很不错,基本上我就很少用vs的调试。
  • 相关阅读:
    前端-微信公众号开发(jssdk)
    wampserver 配置本地环境局域网内pc移动访问
    客户端缓存之localStorage and sessionStorage
    webpack+vue搭建基础
    高德地图javascriptAPI基本使用心得(下)
    高德地图javascriptAPI基本使用心得(上)
    表单单选多选项清除默认样式小技巧
    (原创)C#零基础学习笔记003-流程控制语句
    (原创)C#零基础学习笔记002-表达式与运算符
    (原创)C#零基础学习笔记000-学习结构
  • 原文地址:https://www.cnblogs.com/jetz/p/959702.html
Copyright © 2020-2023  润新知