日期:2014-05-18 浏览次数:20905 次
端午节有空本来是为整理一下C#调用C/C++库的方法,为了测试用例顺便实现了一直想实现的一个小的测试框架跟同事们分享一下,NUnit搞得已经比较复杂了,这个非常简单理解起来容易,用起来比较方便,谁再想用其它功能再自己加吧,如果功能要求比较多就直接用NUnit好了,不要再自己造轮子了。
此篇献给伟大的屈原,是他给我们创造了这样一个假期!
代码比较简单,注释也写了不少,就不再多说了,直接上代码,时间仓促,不保证没有BUG:
/** * A mini test framework: TTest * Noock.tian@gmail.com * version: 0.1 * updated: 2012-06-24 * * Usage: * 1) Write a static test case method to do test, which must need no arguments; * 2) Tag the test method with TestCaseAttribute attribute; * 3) Call Test.Run( ) functions at anytime; * * If a log file is needed, we have at least two methods to get that: * 1) Run the test in a console and redirect the output to a file, like this: * .\myapp.exe > test.log * 2) Set the TTest.Out, like this * using (FileStream fs = new FileStream(string.Format("Test_{0}.log", DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")),FileMode.CreateNew)) { using (StreamWriter sw = new StreamWriter(fs)) { Test.Out = sw; Test.Run(); Test.Out = Console.Out; } } * 3) You must know, create it! */ using System; using System.Diagnostics; using System.IO; using System.Reflection; namespace Noock.TTest { /// <summary> /// An attribute which indicate that the method is a test case, it will be run by the test engine. /// </summary> /// <remarks> /// A test case method should: /// 1) requires no arguments; /// 2) static; /// 3) private (recommend) /// 4) returns void (recommend); /// </remarks> public class TestCaseAttribute : System.Attribute { public string Target { get; set; } } /// <summary> /// Indicates a failed test case /// </summary> public class TestFailedException : Exception { public TestFailedException(string msg) : base(msg) { } } /// <summary> /// Test engine /// </summary> /// <remarks> /// <para>Call Equals functions for condition check for every test case method</para> /// <para>call a Run( ) function to start test</para> /// </remarks> public static class TTest { #region Condition checkers /// <summary> /// Compare two int values /// </summary> /// <param name="expect">expected value</param> /// <param name="actual">actual value</param> /// <param name="msg">a message to display if failed</param> public static void AreEqual(int expect, int actual, string msg = null) { if (expect != actual) throw new TestFailedException(msg ?? string.Format("Values not equals: expect {0}, got {1}", expect, actual)); } /// <summary> /// Compare two double values /// </summary> /// <param name="expect">expected value</param> /// <param name="actual">actual value</param> /// <param name="msg">a message to display if failed</param> public static void AreEqual(double expect, double actual, string msg = null) { if (Math.Abs(expect - actual) > double.Epsilon) throw new TestFailedException(msg ?? string.Format("Values not equals: expect {0}, got {1}", expect, actual)); } /// <summary> /// Compare two strings /// </summary> /// <param name="expect">expected value</param> /// <param name="actual">actual value</param> /// <param name="msg">a message to display if failed</param> /// <param name="ignoreCase">true: case insensitive, false: case sensitive</param> public static void AreEqual(string expect, string actual, bool ignoreCase = false, string msg = null) { if( !expect.Equals(actual, ignoreCase ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture) ) throw new TestFailedException(msg ?? string.Format(" <div class="clearfix"></div> </div> <nav aria-label="..."> <ul class="pager"> <li class="previous"><a href="74992">上一篇:Ftp.dll操作上传FTP文件</a></li> <li class="next"><a href="23413">下一篇: 让C#生成不反复随机数 </a></li> </ul> </nav> <div class="alert alert-warning" role="alert"> <strong>免责声明:</strong> 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 </div> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">相关资料<span><a target="_blank" class="pull-right" href="/csharp/">更多></a></span></h3> </div> <div class="panel-body row"> <ol> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/74286' title=' matlab,20秒。该如何处理 ' target="_blank"> matlab,20秒。该如何处理 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/56293' title=' c#数据累加存入excel ' target="_blank"> c#数据累加存入excel </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/67883' title=' 关于买房,该如何处理 ' target="_blank"> 关于买房,该如何处理 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/2416' title=' ESC指令打印,该如何解决 ' target="_blank"> ESC指令打印,该如何解决 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/36165' title=' 求一段正规表达式解决办法 ' target="_blank"> 求一段正规表达式解决办法 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/65708' title=' 想学.net解决方法 ' target="_blank"> 想学.net解决方法 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/67718' title=' CSDN太快活了 ' target="_blank"> CSDN太快活了 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/51837' title=' 怎么终止一个已挂起的线程 ' target="_blank"> 怎么终止一个已挂起的线程 </a></li></div> <div class="col-md-6 col-xs-12"> <li class="articleAbout"><a href='/csharp/41014' title=' 怎么自制IE,过滤ARP欺骗所产生的框架页面 ' target="_blank"> 怎么自制IE,过滤ARP欺骗所产生的框架页面 </a></li></div> </ol> </div> </div> </div> <div class="col-lg-4 hidden-sm hidden-xs"> <!--右边的内容--> <a id="AdPageRight1_AdPageRight" href="http://www.tdyun.com/host/?aiyiweb" target="_blank"><img class="img-responsive" src="/images/TdPageAd/host.png" alt="香港全能空间 香港高速云虚拟主机PHP/ASP/NET送MSSQL和MYSQL" /></a> <script src='/Scripts/AdContentPage300_1.js' language='javascript'></script> <script src='/Scripts/AdContentPage300_2.js' language='javascript'></script> <script src='/Scripts/AdContentPage300_3.js' language='javascript'></script> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">推荐阅读<span><a target="_blank" class="pull-right" href="/csharp/">更多></a></span></h3> </div> <div class="panel-body"> <ol> <li class="articleAbout"><a href=/csharp/24674 title=' C# DevExpress控件, GridControl中复选框值改变事件,该如何处理 ' target="_blank"> C# DevExpress控件, GridControl中复选框值改变事件,该如何处理 </a></li> <li class="articleAbout"><a href=/csharp/33670 title=' 关于Encording转码的有关问题 ' target="_blank"> 关于Encording转码的有关问题 </a></li> <li class="articleAbout"><a href=/csharp/65208 title=' 关于网站字体设置有关问题 ' target="_blank"> 关于网站字体设置有关问题 </a></li> <li class="articleAbout"><a href=/csharp/9112 title=' 运算符的意义 ' target="_blank"> 运算符的意义 </a></li> <li class="articleAbout"><a href=/csharp/65858 title=' 大伙儿说不最近活跃不活跃,散分 ' target="_blank"> 大伙儿说不最近活跃不活跃,散分 </a></li> <li class="articleAbout"><a href=/csharp/34487 title=' 问一个SQL聚合函数的有关问题 ' target="_blank"> 问一个SQL聚合函数的有关问题 </a></li> <li class="articleAbout"><a href=/csharp/24919 title=' 这是最简单的c#程序吗?最少代码行?还能再少行吗?该如何解决 ' target="_blank"> 这是最简单的c#程序吗?最少代码行?还能再少行吗?该如何解决 </a></li> <li class="articleAbout"><a href=/csharp/41562 title=' +++++++++SQLDMO备份数据库的有关问题? ' target="_blank"> +++++++++SQLDMO备份数据库的有关问题? </a></li> <li class="articleAbout"><a href=/csharp/37399 title=' 在安装即将完成时,在Installer类有删除指定文件的操作,当完成安装后运行桌面的快捷方式则有进行修复安装,请教怎么解决 ' target="_blank"> 在安装即将完成时,在Installer类有删除指定文件的操作,当完成安装后运行桌面的快捷方式则有进行修复安装,请教怎么解决 </a></li> <li class="articleAbout"><a href=/csharp/40248 title=' 高手看下如何样对任意文件进行二进制的修改或者删除?(和数据库无关) ' target="_blank"> 高手看下如何样对任意文件进行二进制的修改或者删除?(和数据库无关) </a></li> <li class="articleAbout"><a href=/csharp/29358 title=' 安装windows服务,写一个bat,双击执行安装。但是安装不成功,请问是什么原因 ' target="_blank"> 安装windows服务,写一个bat,双击执行安装。但是安装不成功,请问是什么原因 </a></li> <li class="articleAbout"><a href=/csharp/59756 title=' 用数据库,application,数组分别实现的算法哪个比较好呢?解决方法 ' target="_blank"> 用数据库,application,数组分别实现的算法哪个比较好呢?解决方法 </a></li> <li class="articleAbout"><a href=/csharp/21746 title=' 如何把2M或更大的图片的大小 变成 500K以内呢 ' target="_blank"> 如何把2M或更大的图片的大小 变成 500K以内呢 </a></li> <li class="articleAbout"><a href=/csharp/34106 title=' C#的.exe,该怎么处理 ' target="_blank"> C#的.exe,该怎么处理 </a></li> <li class="articleAbout"><a href=/csharp/45632 title=' .net2003控件移动出现拖影有关问题(timer控制移动) ' target="_blank"> .net2003控件移动出现拖影有关问题(timer控制移动) </a></li> <li class="articleAbout"><a href=/csharp/53044 title=' 有人对ListView的原点(ORIGIN)有研究么 ' target="_blank"> 有人对ListView的原点(ORIGIN)有研究么 </a></li> <li class="articleAbout"><a href=/csharp/17939 title=' WCF的连接有关问题 ' target="_blank"> WCF的连接有关问题 </a></li> <li class="articleAbout"><a href=/csharp/9948 title=' c# 绑定数据到 DataGridViewComboBoxColumn 没效果 ' target="_blank"> c# 绑定数据到 DataGridViewComboBoxColumn 没效果 </a></li> <li class="articleAbout"><a href=/csharp/66173 title=' 今日周末,来揭发一个骗子,好像经常在csdn上混的 ' target="_blank"> 今日周末,来揭发一个骗子,好像经常在csdn上混的 </a></li> <li class="articleAbout"><a href=/csharp/56600 title=' Yii Framework 开发课程(10) UI 组件 自定义组件 ' target="_blank"> Yii Framework 开发课程(10) UI 组件 自定义组件 </a></li> </ol> </div> </div> </div> </div> <div class="clearfix"></div> <footer class=" footer navbar-bottom"> <em>友情链接:</em> <a href="http://www.aiyiweb.com/" target="_blank">爱易网 </a> <a href="http://www.aiyiweb.com/" target="_blank">云虚拟主机技术 </a> <a href="http://www.aiyiweb.com/" target="_blank">云服务器技术 </a> <a href="http://www.aiyiweb.com/" target="_blank">程序设计技术 </a> <a href="http://www.aiyiweb.com/" target="_blank">开发网站 </a> <a href="http://www.aiyiweb.com/" target="_blank">APP开发教程 </a> <br /> <script type="text/javascript">(function(){document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E'));var bdcs = document.createElement('script');bdcs.type = 'text/javascript';bdcs.async = true;bdcs.src = 'http://znsv.baidu.com/customer_search/api/js?sid=15239353030108964139' + '&plate_url=' + encodeURIComponent(window.location.href) + '&t=' + Math.ceil(new Date()/3600000);var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(bdcs, s);})();</script> Copyright © 2013-2025 爱易网页 当前在线:874人 网站在1天2时8分15秒内访问总人数:316638人 当前 7.69% <a href="https://beian.miit.gov.cn" target="_blank">粤ICP备18100884号-2 </a> <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script> <script>LA.init({ id: "JszEmKrtpbU59dY5", ck: "JszEmKrtpbU59dY5" })</script> </footer> </div> </body> </html>