JavaScript的单元测试

分享于 

8分钟阅读

Web开发

  繁體
Screenshot -

免责声明

作者不接受任何效果。否定或者否定的责任,这个代码可以能对你,你的计算机,你的狗。 用你自己的风险。 ( 似曾相识我也喜欢的disclaimer。)

快速而肮脏的旅行

所以你不喜欢阅读你在网上看到的所有文章,或者你没有时间? 然后下载源文件,并在你喜欢的浏览器中打开 unitjs.htm 文件。

Background

尽管库使用高级DOM和JavaScript功能,但是你只需要对HTML和JavaScript有基本的了解就可以使用和扩展工具。

介绍

单元测试是每个开发人员的unquestionable朋友,如果你不这样想,也许是因为你从未在( 有关更多单元测试信息,请参见 ) 之前尝试过。 在这里我没有覆盖单元测试或者测试驱动程序,但是要记住,它使代码可靠,在代码更改后使你自信,并使你的老板感到愉快。 记住,客户端 单元测试 算法是新诞生的思想,而不是像服务器端 单元测试 软件那样使用多年的开发。 这意味着"可用功能较少"和"请报告你找到的Bug。"。

概述- 测试方法

因为我不喜欢创建自己的标准,所以我使用了与NUnit非常相似的语法。 不是那么酷你甚至不需要学习如果你熟悉 wince,只要注意小区别。 首先,让我们在同一行:

//Create a test casefunction TestGuidAlgorithm()
{
 Console.Out.Write("Test guid algorithm...");
 Assert.That( "hello", new Is.EqualTo("hello") ); 
 Console.Out.Write("done!");
}

在 上面 代码中,我创建了一个测试方法,将一些信息输出到控制台,并断言一些约束。 当我们运行测试夹具时,这个测试将包括。 你是否认为:"文本案例? Text你在说什么"? 我给你一个简短的解释。 测试方法的Collection 称为测试夹具。 我将测试方法称为测试用例。 那很简单啊?

测试的内容- 组件

首先,让我来看看我们现在要测试的内容。 我已经为自动字段标识属性创建了一个伪guid生成器。 它的目的是在每次调用方法时创建唯一标识。

//Component to be testedfunction _GuidComponent()
{
 // Uniqueidentifier seedthis.GUID = 0;
}// Uniqueidentifier generator_GuidComponent.prototype.GetNew = function()
{
 return"o_" + this.GUID++;
}var guidComponent = new _GuidComponent();
...var currentUid = guidComponent.GetNew();//Should be"o_0";currentUid = guidComponent.GetNew();//Should be"o_1";

查看这个算法,我提出了两个测试用例来验证代码是否工作,而生成的is确实独特。

如何测试它- 文本夹具

现在,我们需要创建我们的文本夹具。 在这里,你将看到由于JavaScript语言特性的一些差异。

//Text Fixturefunction GuidTest()
{
 this.Description = "Unit tests to exercise Guid component";
 this.Category = "Helpers";
}//JavaScript inheritance. It is similar to implementing a interface.GuidTest.prototype = new ITextFixture();//Java script hack to maintain the correct constructorGuidTest.prototype.constructor = GuidTest;

除了最后两个命令之外,它应该非常容易理解代码 上面。 基本上,它意味着像 inherit 一样从一个类到另一个类,并获得它的功能。 解释它不仅仅是这篇文章的范围,但是如果你有好奇的话,我会给你解释一下。

下一步是覆盖一些fixture功能,如果你需要这样做的话。 这里,我们将跟踪每个测试方法的运行时间。

//Override the test Setup method//Setup: Common set of functions that are performed just before //each test method is calledGuidTest.prototype.SetUp = function()
{ 
 this.StartTime = new Date();
}//Override the test TearDown method//TearDown: Common set of functions that are performed after each test method is runGuidTest.prototype.TearDown = function()
{
 var elapsedTime = new Date().getTime() - this.StartTime.getTime();
 Console.Out.Write("Finished in" + (elapsedTime/1000/60) + "ms ||" + 
 (elapsedTime/1000) + "s");
}//Create the test fixture instancevar guidTestFixture = new GuidTest();

最后,但并非最不重要的是,测试用例本身。

//Create a test casefunction TestGuidAlgorithm()
{
 Console.Out.Write("Test guid algorithm...");
 for(var i = 0; i<3; i++)
 {
 var currentUid = guidComponent.GetNew();
 Assert.That( currentUid, new Is.EqualTo("o_" + i) );
 }
 Console.Out.Write("done!");
}//Add test case to test fixtureguidTestFixture.AddTest(TestGuidAlgorithm);//Create another test casefunction TestDifferentGuids()
{
 Console.Out.Write("Test different guids algorithm...");
 for(var i = 0; i<3; i++)
 {
 var currentUid = guidComponent.GetNew();
 //Assert.That( currentUid, new Is.NotEqualTo("o_" + i) );//Force guid algorithm to fail (just for illustration, //you don't really want your tests to fail right?) Assert.That( currentUid, new Is.EqualTo("o_" + i) );
 }
 Console.Out.Write("done!");
}//Add test case to test fixtureguidTestFixture.AddTest(TestDifferentGuids);

记住将测试添加到装备中,否则当你启动夹具时它们将不会运行。 如果你是 C# 开发人员,你可能已经注意到这个步骤是必要的,因为我们在JavaScript中没有属性。 但是 !

然后 finally 把你的装备添加到引擎里 !

//Add test fixture to unit.js engineUnitJs.AddTextFixture(guidTestFixture);//Run all test fixturesUnitJs.Run();

目前,我已经实现了几个 IConstraint 方法: EqualToNotEqualTo ( 没有 class ),GreaterThanGreaterThanOrEqualToLessThanLessThanOrEqualTo

哦,是的,调试窗口是反向的。 我个人首先喜欢看最后的事件,但是如果你想要的话,我可以向你展示如何恢复。

结束语

这就是我现在所要提供的 ! 请随时请求新功能,报告 Bug 或者告诉我这些东西有多酷。 enjoy!

引用

网络上的一些资源:

历史记录

  • 12-13-2007
    • 原始文章
  • 12-15-2007
    • 删除不必要的文件并减少对外部脚本的依赖。 现在只需要 debugHelper

JAVA  Javascript  test  
相关文章