做了个简单的单元测试框架,只算个毛坯,遇到一些问题。
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
分享到:
相关推荐
C++单元测试三大框架的比较软件测试1、TUT结构框架简单。添加新的测试工作量小;无须注册测试;可移植性好(因其只需两个头文件,就可以完成测试工作);便于装卸;提供接口可以扩展其输出方式等。最大的优点:轻量级,...
单元测试框架系列之单元测试框架系列之-JUnit.pdf
谷歌的gtest单元测试框架是一个广泛使用的开源工具,尤其在跨平台的软件开发中扮演着重要角色。这个框架为C++编程语言提供了强大的测试能力,帮助开发者确保代码的正确性和可靠性。gtest的核心理念是通过定义断言...
Google Test(gtest)是由Google提供的一个C++单元测试框架,广泛应用于C++程序的测试中。本系列文档将详细介绍如何使用gtest,包括其下载、安装、配置以及编写测试案例。文档分为多个部分,涵盖了gtest的基本使用...
Busted是一个流行的Lua单元测试框架,它提供了简洁的语法和丰富的功能,使得编写和运行测试用例变得简单易行。Busted的主要特点包括: 1. **断言库**:Busted提供了一套丰富的断言函数,如`assert.is_true`,`...
### Android单元测试框架搭建手册 #### 一、前言 随着移动互联网的快速发展,Android应用的质量成为了用户体验的关键因素之一。为了提高应用的质量,确保代码的可靠性和稳定性,单元测试成为了必不可少的一部分。...
`gtest单元测试框架`是基于C++的单元测试库,由Google开发并广泛应用于软件开发中,用于验证代码模块的功能正确性。它提供了一种结构化的、易于使用的接口,允许开发者编写可执行的测试用例,确保代码在修改或添加新...
在`unittest`这个上下文中,我们可能指的是一个基于PHP的单元测试实现,尽管它不是最常用的名称,但我们可以假设这是一个用于PHP的简单单元测试框架。 使用PHP单元测试框架,开发者可以创建测试用例,每个用例包含...
前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。 我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好...
单元测试框架深入与分享 在软件开发中,单元测试是保证代码质量的重要步骤。单元测试框架是实现单元测试的基础设施,本文将深入讨论单元测试框架的原理、实现和最佳实践。 单元测试的定义 单元测试是指对软件中...
在这个特定的场景中,我们关注的是一个名为"VC单元测试测试框架"的项目,这表明我们正在讨论的是一个针对Visual C++ (VC) 应用程序的单元测试框架。接下来,我们将深入探讨这个框架的核心概念以及如何使用它来编写和...
### 开源C++单元测试框架整理 #### 一、概览与基础知识 本文主要围绕`GoogleTest`(简称`gtest`)这一强大的开源C++单元测试框架展开,旨在帮助读者理解如何利用`gtest`来进行有效的单元测试。`gtest`是由Google...
"适用于单元测试框架中的三种测试报告.rar"这个压缩包文件显然包含了与单元测试报告相关的资源,特别适合Python开发环境。 首先,我们要了解Python中常见的单元测试框架,如unittest、pytest和nose。这些框架都支持...
本主题将聚焦于如何在基于C语言的嵌入式环境,特别是在Keil IDE中,利用Unity这个轻量级的单元测试框架来搭建自动化测试流程。 Unity是一个专门为微控制器和嵌入式系统设计的开源单元测试框架。它的特点是小巧、...
lunit,lua单元测试框架,功能强大的单元测试框架源码
一个简单的单元测试框架可以帮助开发者快速、高效地编写和执行这些测试,从而提升代码质量并减少错误。下面我们将深入探讨“简单易用的单元测试框架”的关键知识点。 1. **单元测试的基本概念**:单元测试是对软件...
基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的开发源码-junit4 jar包 Java单元测试框架绿色免费版.zip 基于java的...
- 单机和多机测试的选择取决于测试类型(单元测试、集成测试、系统测试、回归测试)。 - 利用软件工具(如make)加速测试过程。 - 路径控制功能确保测试用例库和结果的独立性和灵活性。 - 自定义工具可选择性...
NUnit是一个单元测试框架,专门针对于.NET来写的,NUnit是在.NET进行TDD的利器