1、JavaScript编码规范:通常在Javascript不希望外界访问的成员和方法名以下划线开始
2、jsUnit测试函数的要遵循的规则与JUnit3.8类似(比如说测试函数名以test开头等)
想要使用jsUnit,要引入jsUnit库jsUnitCore.js,使用如下语句:
<script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script>
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript"> function add(num1,num2) { return num1 + num2; } function subtract(num1,num2) { return num1 - num2; } function multiply(num1,num2) { return num1 * num2; } //以下为测试函数(Test Function) function testAdd() { var result = add(1,2); assertEquals(3,result) } function testSubtract() { var result = substract(1,2); assertEquals(-1,result); } function testMultiply() { var result = multiply(3,2); assertEquals(6,result); } </script> </HEAD> <body> </body> </HTML>
对于正常的工程项目来说,一般将测试代码和实际代码分开,将实际代码单独放到一个js文件中,如:test1.js
function add(num1,num2) { return num1 + num2; } function subtract(num1,num2) { return num1 - num2; } function multiply(num1,num2) { return num1 * num2; }
测试:
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> //以下为测试函数(Test Function) function testAdd() { var result = add(1,2); assertEquals(3,result) } function testSubtract() { var result = subtract(1,2); assertEquals(-1,result); } function testMultiply() { var result = multiply(3,2); assertEquals(6,result); } </script> </HEAD> <body> </body> </HTML>
3、对于jsUnit来说,其setUp和tearDown方法与Junit的运行原理是不同的,JUnit中的setUo和tearDown之间是没有关系的,也就是说不同的测试方法运行在不同的测试对象之中,而jsUnit的各个测试函数是运行在同一个测试页面中的。因此setUp和tearDown会针对同一个变量进行操作:
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> var count = 0; function setUp() { alert("setUp:" + count++); } function tearDown() { alert("tearDown"); } //以下为测试函数(Test Function) function testAdd() { var result = add(1,2); assertEquals(3,result) } function testSubtract() { var result = subtract(1,2); assertEquals(-1,result); } function testMultiply() { var result = multiply(3,2); assertEquals(6,result); } </script> </HEAD> <body> </body> </HTML>
jsUnit提供了setUpPage方法,类似于JUnit4中的@BeforeClass,此函数只执行一次(在页面加载后),并且必须在函数最后一行添加:setUpPageStatus = "complete";
这行代码必须放在setUpPage函数的最后一行,告诉jsUnit setUpPage函数已经执行完毕,如果不加页面就会停止在这里,直到浏览器提示超时
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> var count = 0; //此函数只执行一次(在页面加载后),类似于JUnit4中的@BeforeClass function setUpPage() { alert("setUpPage invoke"); //这行代码必须放在setUpPage函数的最后一行, //告诉jsUnit setUpPage函数已经执行完毕,如果不加 //页面就会停止在这里,直到浏览器提示超时 setUpPageStatus = "complete"; } function setUp() { alert("setUp" + count++); } function tearDown() { alert("tearDown"); } //以下为测试函数(Test Function) function testAdd() { var result = add(1,2); assertEquals(3,result) } function testSubtract() { var result = subtract(1,2); assertEquals(-1,result); } function testMultiply() { var result = multiply(3,2); assertEquals(6,result); } </script> </HEAD> <body> </body> </HTML>
没有提供与@AfterClass对应的函数
3、网页上的三个输入文本,在1,2上输入数字,提供一个add按钮,点击按钮将相加结果填到第三个文本域,然后测试add函数
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> var count = 0; //此函数只执行一次(在页面加载后),类似于JUnit4中的@BeforeClass function setUpPage() { alert("setUpPage invoke"); //这行代码必须放在setUpPage函数的最后一行, //告诉jsUnit setUpPage函数已经执行完毕,如果不加 //页面就会停止在这里,直到浏览器提示超时 setUpPageStatus = "complete"; } function setUp() { //给文本域赋初值 document.getElementById("value1").value = 2; document.getElementById("value2").value = 3; } function tearDown() { //恢复初始值 document.getElementById("value1").value = ""; document.getElementById("value2").value = ""; document.getElementById("value3").value = ""; } //以下为测试函数(Test Function) function testAdd() { var result = add(1,2); assertEquals(3,result) } function testSubtract() { var result = subtract(1,2); assertEquals(-1,result); } function testMultiply() { var result = multiply(3,2); assertEquals(6,result); } function testAddNumbers() { addNumbers(); assertEquals("5",document.getElementById("value3").value); } </script> </HEAD> <body> <input type="text" id="value1"><br> <input type="text" id="value2"><br> <input type="text" id="value3"><br> <input type="button" value="add" onclick="addNumbers();"><br> </body> </HTML>
test1.js文件:
function add(num1,num2) { return num1 + num2; } function subtract(num1,num2) { return num1 - num2; } function multiply(num1,num2) { return num1 * num2; } function addNumbers() { var v1 = document.getElementById("value1").value; var v2 = document.getElementById("value2").value; v1 = parseInt(v1); v2 = parseInt(v2); var v3 = v1 + v2; document.getElementById("value3").value = v3; }
4、测试套件
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> //测试套件名一定为suite function suite() { var testSuite = new top.jsUnitTestSuite(); //这里增加的测试页面的路径是相对于 //测试运行器(testRunner.html)的路径,而不是当前页面 testSuite.addTestPage("../test2.html"); testSuite.addTestPage("../test2.html"); testSuite.addTestPage("../test2.html"); return testSuite; } </script> </HEAD> <body> <input type="text" id="value1"><br> <input type="text" id="value2"><br> <input type="text" id="value3"><br> <input type="button" value="add" onclick="addNumbers();"><br> </body> </HTML>
上例是在套件里只增加测试页面,下面的例子是套件里既增加测试页面,也增加测试套件,即测试套件嵌套:
<html> <HEAD> <title>test</title> <script type="text/javascript" src="jsunit/app/jsUnitCore.js"> </script> <script type="text/javascript" src="test1.js"></script> <script type="text/javascript"> //定义自己的一个测试套件 function mySuite() { var testSuite = new top.jsUnitTestSuite(); //这里增加的测试页面的路径是相对于 //测试运行器(testRunner.html)的路径,而不是当前页面 testSuite.addTestPage("../test2.html"); testSuite.addTestPage("../test2.html"); testSuite.addTestPage("../test2.html"); return testSuite; } //测试套件名一定为suite function suite() { var testSuite = new top.jsUnitTestSuite(); //这里增加的测试页面的路径是相对于 //测试运行器(testRunner.html)的路径,而不是当前页面 testSuite.addTestPage("../test2.html"); //这是增加测试页面 testSuite.addTestSuite(mySuite());//这是增加测试套件 return testSuite; } </script> </HEAD> <body> <input type="text" id="value1"><br> <input type="text" id="value2"><br> <input type="text" id="value3"><br> <input type="button" value="add" onclick="addNumbers();"><br> </body> </HTML>