Nunit使用心得
- 测试中,遇到问题,修改完后,无论当前在哪个位置,都可以用Repeat Test Run运行刚才的测试,很方便。
- 如果多个测试共用一个关键资源,如数据库的连接,监听服务器等,可以用[TestFixtureSetUp]定义一个全局的初始化处理。
- 测试的方法多种多样,不一定拘泥于比较大小,在某些并发环境下,可以采用其他的途径。比如,我测试通讯过程,测试本身只是一个死循环,睡眠一段时间,醒来就看看某些关键量是否达到要求。然后,定义一个时间(Timespan),以该变量在这个时间内是否达到要求作为测试的依据。
- 还有,这个也非常关键,就是Console的输出。不光Nunit用它,Testdriven.net也用它,所以要尽量规范化,尽量好看,尽量反映发生的位置。我的一个输出:
------ Test started: Assembly: ComServer.exe ------
time:0 cnt:0 建立连接线程。192.168.1.71:3139 [11:05]CO(192.168.1.71:3139) 发送:1 time:1 cnt:0 [11:05]CO(192.168.1.71:15012) 类型:1 信息:1 [11:06]CO(192.168.1.71:3139) 发送:2 time:2 cnt:0 [11:06]CO(192.168.1.71:15012) 类型:1 信息:2 [11:07]CO(192.168.1.71:3139) 发送:3 time:3 cnt:0 [11:07]CO(192.168.1.71:15012) 类型:1 信息:3 [11:08]CO(192.168.1.71:3139) 发送:4 time:4 cnt:0 [11:08]CO(192.168.1.71:15012) 类型:1 信息:4 [11:09]CO(192.168.1.71:3139) 发送:5 time:5 cnt:0 [11:09]CO(192.168.1.71:15012) 类型:1 信息:5 [11:10]CO(192.168.1.71:3139) 发送:6 time:6 cnt:0 TcpThread线程退出! [11:11]CO(192.168.1.71:3139) 发送:7.015625 time:7.015625 cnt:0 TcpThread【出错】发送信息失败,连接可能已经断开! [11:11]CO(192.168.1.71:3139) 重发:7.015625 1/7 TcpThread【出错】发送信息失败,连接可能已经断开! [11:12]CO(192.168.1.71:3139) 重发:7.015625 2/7 [11:12]CO(192.168.1.71:3139) 发送:8.03125 time:8.03125 cnt:0 TcpThread【出错】发送信息失败,连接可能已经断开! [11:12]CO(192.168.1.71:3139) 重发:7.015625 8.03125 3/7 TcpThread【出错】发送信息失败,连接可能已经断开! [11:13]CO(192.168.1.71:3139) 重发:7.015625 8.03125 4/7 [11:13]CO(192.168.1.71:3139) 发送:9.046875 time:9.046875 cnt:0 TcpThread【出错】发送信息失败,连接可能已经断开! [11:13]CO(192.168.1.71:3139) 重发:7.015625 8.03125 9.046875 5/7 TcpThread【出错】发送信息失败,连接可能已经断开! [11:14]CO(192.168.1.71:3139) 重发:7.015625 8.03125 9.046875 6/7 [11:14]CO(192.168.1.71:3139) 发送:10.0625 time:10.0625 cnt:0 TcpThread【出错】发送信息失败,连接可能已经断开! [11:14]CO(192.168.1.71:3139) 重发:7.015625 8.03125 9.046875 10.0625 7/7 TcpThread【出错】发送信息失败,连接可能已经断开! [11:15]CO(192.168.1.71:3139) 类型:2 信息:发送失败,连接将断开! time:11.078125 cnt:999 TcpThread线程退出! time:12.09375 cnt:999 time:13.109375 cnt:999 time:14.125 cnt:999 time:15.140625 cnt:999 time:16.15625 cnt:999 time:17.171875 cnt:999 time:18.1875 cnt:999 time:19.203125 cnt:999 测试(客户端主动断开后,发送缓冲数据应该累积,需人工查看)结束!
1 passed, 0 failed, 0 skipped, took 40.70 seconds.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaWeb——MyBatis框架之对数据库的增删改查操作CRUD实践及MyBatis参数的深入详解
- JavaWeb——MyBatis框架之入门总结及案例实战,常见坑处理:Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0
- JavaWeb——MyBatis框架之执行过程原理与解析(通过自定义MyBatis查询所有操作的实现来观察整个过程)
- Java——抽象类(基本概念、使用原则、模板设计模式)
- Java——覆写(概念、覆写的意义、覆写的要求)
- Java——继承性(继承的作用、实现、限制)
- JavaWeb——JSON语法讲解与Jackson解析器完成JSON数据与Java对象的转换(应用Ajax与JSON实现校验用户名是否在的功能)
- JavaWeb——JQuery之高级案例实战(打开网页自动弹出广告效果、抽奖效果实现)
- JavaWeb——JQuery之高级操作应用及实践案例总结(动画、遍历、事件绑定)
- Java——简单Java类深入(数据表与简单Java类、一对多映射、双向一对多映射、多对多映射)
- Java——代码块(普通块、构造块、静态块)
- JavaWeb——JQuery之五种选择器的应用及实践案例总结(基本选择器、层级选择器、属性选择器、过滤选择器、表单过滤选择器)
- Java——引用传递实例分析(进阶分析、对象比较、类与类的关联实现)
- JavaWeb——JQuery之基本概述与快速入门实践总结(JQuery各版本区别、JQuery对象和JS对象的区别与转换)
- Java——动态代理设计模型概述(实现步骤、增强方式)与代理商采购电脑模拟程序实战