专栏首页听雨堂用Nunit测试通讯程序

用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(5008, 500, 500, 3, new Dele_ConnsNotify(mynoti), 437, 437);

            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的调试。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【4】通过简化的正则表达式处理字符串

    阅读目录 常见字符串操作 使用正则表达式处理字符串 “前后限定”查找目标 自动处理转义字符 界定串的通用化 多个目标的匹配 进一步扩展 结论 在...

    用户1075292
  • 从MapX到MapXtreme2004[9]-标注的强调显示

            如果想要将一个选中的图元强调显示,用红色醒目的文字显示的话,我的思路如下:             1、不可能直接改原先的图元,所以必须要在一个...

    用户1075292
  • 从MapX到MapXtreme2004[9]-标注的强调显示

            如果想要将一个选中的图元强调显示,用红色醒目的文字显示的话,我的思路如下:             1、不可能直接改原先的图元,所以必须要在一个...

    用户1075292
  • 仅需9.9元,即可体验音视频上传、播放、转码、视频 AI 等功能

    腾讯云点播 满足视频上传、转码、 AI、直播回看等需求 新用户体验包仅需9.9元 流量、存储、转码、审核多种资源包低至7.5折 购买任意点播资源包 免费赠送基...

    腾讯云视频
  • 《Kotin 极简教程》第11章 使用Kotlin 集成 SpringBoot开发Web服务端第11章 使用Kotlin集成SpringBoot开发Web服务端《Kotlin极简教程》正式上架:

    我们在前面第2章 “ 2.3 Web RESTFul HelloWorld ” 一节中,已经介绍了使用 Kotlin 结合 SpringBoot 开发一个RES...

    一个会写诗的程序员
  • JavaScript基础笔记

    小胖
  • 论文Express | AI的智商(IQ)怎么测?这其实是个策略比赛

    大数据文摘
  • 技术总结:自动扩张WPF树型表格列宽

    问题描述     今天测试人员提了一个易用性的BUG,主要是说系统目前使用的树型控件不支持自动扩张列的宽度。其实客户那边已经对这个问题提了多次,不过由于对WPF...

    用户1172223
  • 前端MVC Vue2学习总结(二)——Vue的实例、生命周期与Vue脚手架(vue-cli)

    一、Vue的实例 1.1、创建一个 Vue 的实例 每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue...

    张果
  • 给句话就泛滥!机器学习再加点想象,这款交互小说带你领略“无限生成的世界”

    还记得去年圣诞吗,黑镜出了一个特别篇——《黑镜:潘达斯奈基》,尽管黑镜系列被Netflix买下后已走下神坛,但也不能否认他们在技术上的创新。

    大数据文摘

扫码关注云+社区

领取腾讯云代金券