文章目录
- javaScript 单元测试(jsUnit):http://www.jsunit.net/
- JavaScript 编码规范:通常在 JavaScript 不希望外界访问的成员和方法名以下划线开始。
- jsUnit 测试函数的要遵循的规则与 JUnit 3.8 类似(比如说测试函数名以 test 开头等)
一定要记住testRunner.html一定要用IE浏览器打开,并且要在本地打开不要在IDEA里打开。
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../jsunit2_2/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 = subtract(1, 2);
assertEquals(-1, result);
}
function testMultiply() {
var result = multiply(1, 2);
assertEquals(2, result);
}
</script>
</head>
<body>
</body>
</html>
我们故意改错看看
可以点击show all将会在新的页面打开一个错误集合
- 测试内容和被测试内容放在一起很不规范,因此我们要新建个test1.js文件然后再引入
<script type="text/javascript" src="test1.js"></script>
- 对于 JsUnit 来说,其 setUp 和 tearDown 方法与 JUnit 的运行原理是不同的,JUnit 中的 setUp 和tearDown 之间是没有关系的,也就是说不同的测试方法运行在不同的测试对象之中,而 JsUnit 的各个测试函数是运行在同一个测试页面中。因此 setUp 和 tearDown会针对同一个变量进行操作。
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../jsunit2_2/jsunit/app/jsUnitCore.js"></script>
<script type="text/javascript" src="test1.js"></script>
<script type="text/javascript">
var count = 0;
function setUp() {
alert("setUP");
alert(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(1, 2);
assertEquals(2, result);
}
</script>
</head>
<body>
</body>
</html>
也就是说如果是Junit结果是0,0,0
而JsUnit是0,1,2
//此函数只执行一此(在页面加载后),类似与JUnit 4.x中的@BeforeClass
//注意:并没有与@AfterClass对应的函数存在
function setUpPage() {
alert('setUpPage Invoked');
//这行代码必须放在setUpPage函数的最后一行,告诉JsUnitsetUpPage函数已经执行完毕
setUpPageStatus = "complete";
}
如果把最后一行注释掉结果是:
我们现在做一个例子,在第一个和第二个文本框输入数字,点击按钮第三个文本框出来值,
<input type="text" id="value1"><br>
<input type="text" id="value2"><br>
<input type="text" id="value3"><br>
<input type="submit" value="Add" onclick="addNumber();">
function addNumber() {
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;
}
我们接下来用JsUnit来测试
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 = "";
}
function testAddNumbers() {
var result = addNumber();
assertEquals("5", document.getElementById("value3").value);
}
setUp用来赋初值,tearDown用来清除痕迹
测试套件testSuite
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../jsunit2_2/jsunit/app/jsUnitCore.js"></script>
<script type="text/javascript">
//测试套件名一定为suite
function suite() {
var testSuite = new top.jsUnitTestSuite();
//增加的测试页面的路径是相对于测试运行器(testRunner.html)的路径
// 而不是当前页面,或者写绝对路径
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
return testSuite;
}
</script>
</head>
<body>
</body>
</html>
结果运行三次,每一次运行4个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="../jsunit2_2/jsunit/app/jsUnitCore.js"></script>
<script type="text/javascript">
function mySuite() {
var testSuite = new top.jsUnitTestSuite();
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
testSuite.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
return testSuite;
}
function suite() {
var testSuit = new top.jsUnitTestSuite();
testSuit.addTestPage("E:\\IdeaProjects\\Java\\web\\jsunit\\test1.html");
testSuit.addTestSuite(mySuite());
return testSuit;
}
</script>
</head>
<body>
</body>
</html>
外部引入