`
qiezi
  • 浏览: 498673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简单的单元测试框架

    博客分类:
  • D
阅读更多
做了个简单的单元测试框架,只算个毛坯,遇到一些问题。

1、由于没有完整的堆栈跟踪,所以无法打印出断言失败的行号。
2、无法获得行号,成功、失败或异常都需要显示这个。
3、由于unittest关键字后面的块是一个函数,所以把这个单元测试放在里面时,成了内嵌类,这时D禁止调用static ctor。当然这不算是个大问题。

只做了简单输出,没什么实际用途。代码如下:

class TestCase
{
	public
	template TestCases(Methods ...)
	{
		static this()
		{
			typeof(this) instance = new typeof(this);
			instance.setUp();
			instance.beginTest((typeof(this)).classinfo.name);
			mixin (_TestCases!(Methods));
			instance.endTest();
			instance.tearDown();
		}
	}

	protected:

	void setUp(){}

	void tearDown(){}

	void beginTest(char[] classname)
	{
		this.classname = classname;
	}

	void endTest()
	{
	}

	void assertEqual(T,U)(T t, U u)
	{
		bool pass = (t == u);
		addTestResult(classname, methodname, pass, std.string.format("assertEqual(", t, ", ", u, ")"));
	}

	void assertNotEqual(T,U)(T t, U u)
	{
		bool pass = (t != u);
		addTestResult(classname, methodname, pass, std.string.format("assertNotEqual(", t, ", ", u, ")"));
	}

	private:
	void beginMethodTest(char[] methodname)
	{
		this.methodname = methodname;
	}

	void endMethodTest()
	{

	}

	void runTest(lazy void dg)
	{
		writefln("runTest: " ~ methodname);
		try
		{
			dg();
		}
		catch(Exception ex)
		{
			addTestException(classname, methodname, ex);
		}
	}

	void addTestResult(char[] classname, char[] methodname, bool pass, char[] info)
	{
		writefln("in ", classname, ".", methodname, " ", info, ", result: ", pass);
	}

	void addTestException(char[] classname, char[] methodname, Exception ex)
	{
		writefln("in ", classname, ".", methodname, " ", ex);
	}

	template _TestCases(Methods ...)
	{
		static if (Methods.length > 0)
		{
			const char[] _TestCases = 
				"instance.beginMethodTest(\"" ~ Methods[0] ~ "\");\n" ~ 
				"instance.runTest(instance." ~ Methods[0] ~ "());\n" ~
				"instance.endMethodTest();\n" ~
				_TestCases!(Methods[1..$]);
		}
		else
		{
			const char[] _TestCases = "";
		}
	}

	char[] classname;
	char[] methodname;
}

import std.stdio;


class MathTest : TestCase
{
	mixin TestCases!(
		"testFoo",
		"testBar"
	);

	void setUp()
	{
		writefln("setUp");
	}

	void tearDown()
	{
		writefln("tearDown");
	}

	void testFoo()
	{
		assertEqual(1, 1);
		assertNotEqual(1, 0);
	}

	void testBar()
	{
		assertEqual(1, 0); // must fail
		assertNotEqual(1, 1); // must fail
	}
}


void main()
{
}


输出:
setUp
runTest: testFoo
in unittest.MathTest.testFoo assertEqual(1, 1), result: true
in unittest.MathTest.testFoo assertNotEqual(1, 0), result: true
runTest: testBar
in unittest.MathTest.testBar assertEqual(1, 0), result: false
in unittest.MathTest.testBar assertNotEqual(1, 1), result: false
tearDown
分享到:
评论
1 楼 h_rain 2007-04-10  
赞!

相关推荐

    C++单元测试三大框架的比较

    C++单元测试三大框架的比较软件测试1、TUT结构框架简单。添加新的测试工作量小;无须注册测试;可移植性好(因其只需两个头文件,就可以完成测试工作);便于装卸;提供接口可以扩展其输出方式等。最大的优点:轻量级,...

    单元测试框架系列之单元测试框架系列之-JUnit.pdf

    单元测试框架系列之单元测试框架系列之-JUnit.pdf

    google test 单元测试框架

    谷歌的gtest单元测试框架是一个广泛使用的开源工具,尤其在跨平台的软件开发中扮演着重要角色。这个框架为C++编程语言提供了强大的测试能力,帮助开发者确保代码的正确性和可靠性。gtest的核心理念是通过定义断言...

    玩转Google开源C++单元测试框架Google Test系列.pdf

    Google Test(gtest)是由Google提供的一个C++单元测试框架,广泛应用于C++程序的测试中。本系列文档将详细介绍如何使用gtest,包括其下载、安装、配置以及编写测试案例。文档分为多个部分,涵盖了gtest的基本使用...

    lua单元测试框架测试用例实例

    Busted是一个流行的Lua单元测试框架,它提供了简洁的语法和丰富的功能,使得编写和运行测试用例变得简单易行。Busted的主要特点包括: 1. **断言库**:Busted提供了一套丰富的断言函数,如`assert.is_true`,`...

    php-php单元测试框架-unitTest.zip

    在`unittest`这个上下文中,我们可能指的是一个基于PHP的单元测试实现,尽管它不是最常用的名称,但我们可以假设这是一个用于PHP的简单单元测试框架。 使用PHP单元测试框架,开发者可以创建测试用例,每个用例包含...

    Android单元测试框架搭建手册

    ### Android单元测试框架搭建手册 #### 一、前言 随着移动互联网的快速发展,Android应用的质量成为了用户体验的关键因素之一。为了提高应用的质量,确保代码的可靠性和稳定性,单元测试成为了必不可少的一部分。...

    gtest单元测试框架

    `gtest单元测试框架`是基于C++的单元测试库,由Google开发并广泛应用于软件开发中,用于验证代码模块的功能正确性。它提供了一种结构化的、易于使用的接口,允许开发者编写可执行的测试用例,确保代码在修改或添加新...

    Google的开源C++单元测试框架Google Test使用教程

    前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。 我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好...

    单元测试框架深入与分享

    单元测试框架深入与分享 在软件开发中,单元测试是保证代码质量的重要步骤。单元测试框架是实现单元测试的基础设施,本文将深入讨论单元测试框架的原理、实现和最佳实践。 单元测试的定义 单元测试是指对软件中...

    VC单元测试测试框架

    在这个特定的场景中,我们关注的是一个名为"VC单元测试测试框架"的项目,这表明我们正在讨论的是一个针对Visual C++ (VC) 应用程序的单元测试框架。接下来,我们将深入探讨这个框架的核心概念以及如何使用它来编写和...

    开源C++单元测试框架整理

    ### 开源C++单元测试框架整理 #### 一、概览与基础知识 本文主要围绕`GoogleTest`(简称`gtest`)这一强大的开源C++单元测试框架展开,旨在帮助读者理解如何利用`gtest`来进行有效的单元测试。`gtest`是由Google...

    适用于单元测试框架中的三种测试报告.rar

    "适用于单元测试框架中的三种测试报告.rar"这个压缩包文件显然包含了与单元测试报告相关的资源,特别适合Python开发环境。 首先,我们要了解Python中常见的单元测试框架,如unittest、pytest和nose。这些框架都支持...

    EmbedC_TDD__1 Keil中搭建自动化单元测试框架Unity

    本主题将聚焦于如何在基于C语言的嵌入式环境,特别是在Keil IDE中,利用Unity这个轻量级的单元测试框架来搭建自动化测试流程。 Unity是一个专门为微控制器和嵌入式系统设计的开源单元测试框架。它的特点是小巧、...

    lunit,lua单元测试框架

    lunit,lua单元测试框架,功能强大的单元测试框架源码

    自己写的简单易用的单元测试框架

    一个简单的单元测试框架可以帮助开发者快速、高效地编写和执行这些测试,从而提升代码质量并减少错误。下面我们将深入探讨“简单易用的单元测试框架”的关键知识点。 1. **单元测试的基本概念**:单元测试是对软件...

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip

    基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的...

    WEB自动化测试框架文档.doc

    - 单机和多机测试的选择取决于测试类型(单元测试、集成测试、系统测试、回归测试)。 - 利用软件工具(如make)加速测试过程。 - 路径控制功能确保测试用例库和结果的独立性和灵活性。 - 自定义工具可选择性...

    专门针对于.NET的单元测试框架NUnit

    NUnit是一个单元测试框架,专门针对于.NET来写的,NUnit是在.NET进行TDD的利器

Global site tag (gtag.js) - Google Analytics