首先是所要测试的js代码
function add(num11, num22){
return num11 + num22;
}
function sbutract(num11, num22){
return num11 - num22;
}
function multiply(num11, num22){
return num11 * num22;
}
function addNumbers(){
var v1 = document.getElementById('value11').value;
var v2 = document.getElementById('value22').value;
v1 = parseInt(v1);
v2 = parseInt(v2);
v3 = v1 + v2;
var v3 = v1 + v2;
document.getElementById('value33').value = v3;
}
然后是使用JsUnit编写单元测试的jsUnit_testJS.html
<script type="text/javascript" src="../app/jsUnitCore.js"></script>
<script type="text/javascript" src="mycode.js"></script>
<script type="text/javascript">
//JavaScript编码规范:将JavaScript中不希望外界访问的成员和方法名以下划线开始
var count = 0;
//JUnit会打印000,jsUnit中会打印012
//对于jsUnit来说,其setUp和tearDown方法与JUnit的运行原理是不同的
//JUnit中的setUp和tearDown之间是没有关系的,即不同的测试方法运行在不同的测试对象中
//jsUnit的各个测试函数是运行在同一个测试页面中的,因此setUp和tearDown会针对同一个变量进行操作
function setUp(){
alert(count++);
alert('setUp invoked');
//为页面赋初值:目的是为测试addNumbers()函数做准备
document.getElementById('value11').value = 6;
document.getElementById('value22').value = 9;
}
function tearDown(){
alert('tearDown invoked');
//清理页面痕迹
document.getElementById('value11').value = '';
document.getElementById('value22').value = '';
document.getElementById('value33').value = '';
}
//此函数只执行一次,执行时机是在页面加载后。类似于JUnit4.x中的@BeforeClass
//但jsUnit中并不存在与@AfterClass对应的函数
function setUpPage(){
alert('setUpPage invoked');
//该代码必须放在setUpPage()函数最后一行,用来通知jsUnit:该函数已执行完毕
setUpPageStatus = 'complete';
}
//以下为测试函数(Test Function)
//jsUnit测试函数所要遵循的规则,与JUnit3.8类似
//比如测试函数名以test开头等
function testAdd(){
var result = add(1, 2);
assertEquals(3, result);
}
function testSbutract(){
var result = sbutract(1, 2);
assertEquals(-1, result);
}
function testMultiply(){
var result = multiply(1, 2);
assertEquals(2, result);
}
//jsUnit使用步骤
// 1)将jsUnitCore.js引入到测试页面中
// 2)在测试页面中编写js的测试用例
// 3)打开jsUnit的测试运行器(%JSUNIT_HOME%/testRunner.html)
// 4)在file:///位置输入测试页面的路径
// 我在测试时写的是这个路径:F:\Note\jsunit\tests\jsUnit_testSuite.html
// 因为我在测试时,发现无论如何测试不了,最后把页面拷贝到JsUnit解压后的tests目录下,再测试,通过
// 5)点击Run开始测试
function testAddNumbers(){
addNumbers();
assertEquals('15', document.getElementById('value33').value);
}
</script>
<input type="text" id="value11"><br/>
<input type="text" id="value22"><br/>
<input type="text" id="value33"><br/>
<input type="button" value="Add" οnclick="addNumbers();">
最后是使用了JsUnit中的测试套件的jsUnit_testSuite.html
<script type="text/javascript" src="../app/jsUnitCore.js"></script>
<script type="text/javascript">
//自定义的测试套件
function mySuite(){
var testSuite = new top.jsUnitTestSuite();
//这个相对路径是相对于测试运行器所在的页面,而非当前页面
testSuite.addTestPage('tests/jsUnit_testJS.html');
testSuite.addTestPage('tests/jsUnit_testJS.html');
return testSuite;
}
//jsUnit的测试套件名必须为suite()
function suite(){
var testSuite = new top.jsUnitTestSuite();
testSuite.addTestPage('tests/jsUnit_testJS.html');
testSuite.addTestSuite(mySuite()); //加入我们自定义的测试套件
return testSuite;
}
</script>