镇上最好的单元测试框架 (UTF)






4.36/5 (13投票s)
2004年1月27日
5分钟阅读

116856

264
支持安全上下文和多线程压力测试的单元测试框架
引言
这不是城里唯一的免费单元测试,但它比其他的有一些重要的优势
- 此单元测试可以根据不同的安全上下文检查您的代码
- 它可以在多线程压力下测试您的代码
- 它有一个高级 GUI,包括代理和性能控制
- 它保存测试结果以供进一步分析。
此单元测试框架 (UTF) 背后的想法源于 Nunit,但实现方式不同。如果您已经投入了 Nunit,您仍然可以使用您的 Nunit 测试与此 UTF。您所要做的就是
- 用 UTF 属性标记您的测试。
- 从构造函数中调用您的 [Setup] 方法。
目前 UTF 支持 2 种方法签名
object MethodName()
void MethodName()
为了将您的代码标记为测试代码,您应该将程序集放在 UTF 执行文件夹或子文件夹下。
您必须使用以下属性标记您的程序集
using WiseMobility.UnitTest.Attributes;
[assembly: UTAssemblyBehavior
("Permissions Checks", TextColor="yellow", Enable=true)]
在类级别,您必须使用以下属性
[UTTypeBehavior ("Reflection Manip", TextColor="DarkBlue", Enable=true)]
在方法级别,您必须使用以下属性
[UTMethodBehavior ("OS Version", ExpectedResult=EnmExpectedResult.eSuccess,
TextColor="Green",
Enable=true)]
或
[UTMethodBehavior ("Fail as expected", ExpectedResult=EnmExpectedResult.eFail,
ExpectedException=typeof(DivideByZeroException), TextColor="SlateBlue")]
您可以标记方法的成功预期,如果您预期失败,则应标记预期的异常。有关更多信息,请参阅以下规范。
其他可选属性是
- 性能跟踪属性(此属性可附加到程序集/类/方法)
[assembly: UTPerfMon (EnmPerformanceType.eCPU_Percent)]
[assembly: UTPerfMon (EnmPerformanceType.eMemory_Percent)]
- 安全上下文属性(此属性可附加到程序集/类/方法)
[assembly: UTSecurityPermissionAttribute (enmSecPermissionOptions.eReflection,
Comment="Some Comments")]
- 您可以标记程序集下的任何类或方法,以忽略更高级别的安全上下文属性
[UTSecurityPermissionAttribute (enmSecPermissionOptions.eReflection,
Behavior=enmLimitIgnore.eIgnore)]
有关更多详细信息,请参阅以下 UTF 规范。该规范将为您提供概览,但我们更欢迎您研究代码。
目前报告尚未实现,但您可以使用任何报告机制在 UTP 数据库(SQL Server)之上生成您自己的报告。
如果您有问题或开发了一些想要与他人分享的改进,可以通过以下邮件联系我:bnayanet@hotmail.com
尽情享受 J
概念和设计目标
引言
- 单元测试是开发人员为确保代码质量发布而进行的主要方法。
- 测试应在不同的安全权限和多线程压力下有效。
- 单元测试框架工具应通过帮助开发更健壮的代码来提高开发过程的生产力。
- 其背后的想法是在程序员将代码发布给 QA 部门或他的同事之前,发现大部分错误。
有关为何使用单元测试框架的更多信息,请参阅以下文章
概念
单元测试框架构建了一个用于运行额外测试并评估结果的框架。程序员负责编写测试。单元测试框架负责评估结果。

动机
使用单元测试框架的动机是
- 构建一致的方法,在不同上下文(即受限制的权限或多线程压力下)测试代码,并尽快识别问题,以降低开发过程成本并提高生产力。
- 确保代码质量(健壮代码的好处将影响从开发阶段到 QA 再到部署的整个开发周期)。
- 在代码更改后(无论是由于设计更改还是错误修复)评估代码状态。有时更改一个组件中的代码会导致其他组件失败。在这种情况下,我们有兴趣尽快识别确切的失败点(通过运行与项目相关的所有测试,我们可以使项目恢复到良好状态)。
- 程序员或其任何上级可以在任何时候跟踪项目状态(例如,检查部署前的状态可能会很有趣)。
范围
单元测试框架的范围是测试与用户界面无关的代码。设计目标
单元测试框架规范的设计目标是
- 统一程序员在发布前测试代码的方式。
- 在多线程压力下测试代码。
- 在不同安全权限限制下测试代码。
- 评估代码结果(成功/失败)。
- 评估代码性能(执行时间)。
- 拥有一种按需评估代码的方式(甚至在发布很久之后)。
- 同时进行即时评估和评估报告。
- 即时评估将评估单个测试执行。
- 评估报告将评估任何历史测试执行。
- 支持保存执行结果。
逻辑
声明式测试预期
程序员的任何测试都必须用一些声明性测试预期(即程序员期望测试的结果)进行标记。此预期由单元测试框架评估逻辑使用。
此类声明将包含
- 程序员是期望代码成功还是失败。
- 如果他期望失败,他必须指定他期望抛出的异常类型。
- 代码应在何种权限限制下进行评估,这意味着代码应在完全信任和部分信任下进行评估,同时拒绝每个权限限制。
评估测试执行
在以下情况下,测试执行被评估为成功
- 测试执行未抛出任何异常,并且程序员将其声明为成功。
- 测试执行抛出了一个与程序员期望测试抛出的异常类型(如声明中所述)匹配的异常,并且测试声明为预期失败。
在以下情况下,执行被评估为失败
- 测试执行抛出了异常,而声明期望成功。
- 测试执行抛出了一个不匹配声明的预期异常类型和声明的预期失败的异常。
- 测试执行成功,而声明期望失败。
多线程压力
使用异步执行允许单元测试框架通过同时执行测试的多个实例来评估在受压多线程环境下的执行。
存储评估结果
结果按需或自动存储在数据库存储库中。
- 按需存储将通过响应操作者保存命令而发生。
- 如果内存利用率超过某个限制百分比,将执行自动存储,以避免内存不足异常。
线程控制
由于单元测试框架的异步性质,一个单例线程管理器处理以下任务
- 创建新线程。
- 中止所有测试执行线程。
- 暂停所有测试执行线程。
- 恢复所有测试执行线程。
性能计数器
性能计数器管理器将封装 .NET 性能计数器,以便以优化的方式公开相关计数器。
.Net 专家