C#版本的xUnit的测试框架模型和xUnit.NET开源项目
1. 参考kent beck的测试驱动写的C#测试框架模型
a) 测试用例: WasRun, 基类为TestCase
b) 框架: TestCaseTest用来测试TestCase,本身也是它的子类,可使用run调用自己的方法
c)重点:为WasRun和TestCase,添加setUp,tearDown功能
d)然后,TestResult用来返回和传递结果,主要是计数的结果
e) 最后,TestSuite封装一组测试,并在TestCaseTest中测试
WasRun<=>TestCase<=>TestSuite<=>TestCaseTest<=> Main
2.另外开源完整的测试框架可参考这里 https://github.com/xunit/xunit
贴上模型的代码,大家自己按类区分吧。
namespace xUnit
{
class Program
{
static void Main(string[] args)
{
//(new TestCaseTest("testTemplateMethod")).run();
//(new TestCaseTest("testTemplateMethod")).run();
//(new TestCaseTest("testResult")).run();
//(new TestCaseTest("testFailedResultFormatting")).run();
//(new TestCaseTest("testFailedResult")).run();
(new TestCaseTest("testSuite")).run(new TestResult());
Console.ReadLine();
}
}
}
namespace xUnit
{
class TestResult
{
private int runCount;
private int errorCount;
public TestResult()
{
runCount = 0;
errorCount = 0;
}
public string summary()
{
string sumStr = "" + runCount + " run, " + errorCount + " failed";
return sumStr;
}
public void testStarted()
{
runCount++;
}
public void testFailed()
{
errorCount++;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace xUnit
{
class TestCaseTest : TestCase
{
private string p;
public TestCaseTest(string p) : base(p)
{
// TODO: Complete member initialization
this.p = p;
}
//private WasRun test;
TestResult result;
public override void setUp()
{
//test = new WasRun("testMethod");
result = new TestResult();
}
public void testTemplateMethod()
{
WasRun test = new WasRun("testMethod");
test.run(result);
try
{
Assert.AreEqual("setUp testMethod tearDown ", test.log);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void testResult()
{
WasRun test = new WasRun("testMethod");
test.run(result);
try
{
Assert.AreEqual("1 run, 0 failed", result.summary());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void testFailedResult()
{
WasRun testFailed = new WasRun("testBrokenMethod");
testFailed.run(result);
try
{
Assert.AreEqual("1 run, 1 failed", result.summary());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void testFailedResultFormatting()
{
result.testStarted();
result.testFailed();
try
{
Assert.AreEqual("1 run, 1 failed", result.summary());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void testSuite()
{
TestSuite suite = new TestSuite();
suite.add(new WasRun("testMethod"));
suite.add(new WasRun("testBrokenMethod"));
suite.run(result);
try
{
string msg = result.summary();
Console.WriteLine(msg);
Assert.AreEqual("2 run, 1 failed", msg);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace xUnit
{
class TestSuite
{
ArrayList tests;
public TestSuite()
{
tests = new ArrayList();
}
public void add(WasRun test)
{
tests.Add(test);
}
public void run(TestResult result)
{
foreach (WasRun test in tests)
{
test.run(result);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace xUnit
{
class TestCase
{
protected string methodName = "";
public TestCase()
{
}
public TestCase(string methodName)
{
this.methodName = methodName;
}
public void run(TestResult result)
{
result.testStarted();
setUp();
try
{
Type t = this.GetType();
MethodInfo method = t.GetMethod(methodName);
method.Invoke(this, null);
}
catch (Exception e)
{
result.testFailed();
Console.WriteLine("运行测试程序设定抛出的异常," + e.InnerException.Message);
}
tearDown();
}
public virtual void setUp()
{
}
public virtual void tearDown()
{
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace xUnit
{
class WasRun : TestCase
{
private string p;
public string log = "";
public WasRun(string p)
: base(p)
{
// TODO: Complete member initialization
this.p = p;
}
public void testMethod()
{
//wasRun = true;
log += "testMethod ";
}
public void testBrokenMethod()
{
throw new Exception("testBrokenMethod test failed");
}
public override void setUp()
{
//wasRun = false;
//wasSetUp = true;
log += "setUp ";
}
public override void tearDown()
{
log += "tearDown ";
}
}
}
C#版本的xUnit的测试框架模型和xUnit.NET开源项目的更多相关文章
- React MVC框架 <某某后台商品管理开源项目> 完成项目总结
**百货后台商品信息开源项目 1.利用React app脚手架 2.封装打包 buid 3.更偏向于后台程序员开发思维 4.利用的 react -redux react-router-dom ...
- 使用 xunit 编写测试代码
使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...
- Selenium 4 Python的最佳测试框架
随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...
- 消灭Bug!十款免费移动应用测试框架推荐
对于移动应用开发者而言,Bug往往是最让人头疼的一大问题.不同于时时刻刻可以修补的Web App,移动App中的Bug往往隐藏得很深,甚至有时候等到用户使用才显现出来,这么一来开发者搞不好就会赔了 ...
- python pytest测试框架介绍二
在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...
- React躬行记(14)——测试框架
测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...
- phpunit 测试框架安装
PHPUnit是一个轻量级的PHP测试框架.它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计).来自百度百科 一.下载wg ...
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
- 收藏清单: python测试框架最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
随机推荐
- (转)Android项目重构之路:实现篇
前两篇文章Android项目重构之路:架构篇和Android项目重构之路:界面篇已经讲了我的项目开始搭建时的架构设计和界面设计,这篇就讲讲具体怎么实现的,以实现最小化可用产品(MVP)的目标,用最简单 ...
- C调用栈重温
C栈的地址是从高位地址不断忘低位地址膨胀的,最先调用的函数所处的栈地址最高,后被调用的地址在低位: A->H这些地址表明了表明了基本的调用关系,AB是函数入参,CD是函数内的变量. 先调用者在高 ...
- zabbix_zatree第三方插件
1.下载zatree第三方插件https://github.com/spide4k/zatree.git 2.检查PHP环境需要支持php-xml.php-gd.php-mysql 3.先备份当前za ...
- 云计算之路-试用Azure:如何建立虚拟机之间的内网连接
在阿里云上,同一个帐户创建的所有虚拟机(云服务器)之间的内网是直接连通的.而Azure则完全不一样,一开始使用时有点不知所措,后来摸索出来了——在Azure中只有处于同一个虚拟网络(Virtual N ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何修改标准驱动器编码器分辨率
在某个轴的Enc上双击,可以修改Scaling Factor Numerator 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetao ...
- Android数据库之基本概念(上)
1.Android数据库简单介绍 Android通过结合使用SQLite数据库和Content Provider,提供了结构化数据的持久功能. SQLite数据库能够通过一种结构化的.易于管理的方法来 ...
- golang 聊天室
近期看了一些关于golang的资料.发现它的WEBSOCKT实现真起来真的非常easy.以下是代码 go.net/websocket是须要安装的,这个自己装上即可 package main impor ...
- tomcat中server.xml配置详解(转载)(二)
转载自:https://www.cnblogs.com/starhu/p/5599773.html 一:<Connector>元素 由Connector接口定义.<Connector ...
- iOS 证书管理.p12文件不能导出
iOS证书不能导出p12文件: 首先要确认证书是从你这个电脑上制作生成的! 钥匙串-->我的证书--->右键,就可以导出了!
- 基于Vue的数字输入框组件开发
1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...