際際滷

際際滷Share a Scribd company logo
2013/10/23

嶄翫
?1.テストl嚔_kとは
?2.

テストl嚔_kの朕議
?3. テストl嚔_kの送れ
?4.テストフレ`ムワ`クによ
るテスト
? テストl嚔_kTDDとは

? テスト喘プログラムをく
? テストを佩う
? リファクタリングによるコ`ドの個鋲

? これをRり卦して_kをMめる_k返隈
? プログラムを翌何からた嘛を笋┐困

ソ`スコ`ドの坪何夛を屁尖すること
? コ`ドを弖紗?筝をRり卦していくうちに

嶷}w侭やjになった栽などの鬉垢
こと
? 麿の冱Zと曳べてデバッグしにくい並がい

られる
? エラ`がk伏しても鮫中から誼られる秤鵑
富ない
? テストコ`ドをき、富しづつ_kをMめて
いくこの返隈が鬚い討い襪繁爾錣譴
? 1_kが壼くなる
? 2クロスブラウザテストがgに佩える
? Rり卦し徭咾妊謄好箸佩われることで、屎

械だったプログラムを俐屎してバグがk伏し
てしまった栽にもすぐに返できる。
? y叟業が互い_kの栽、テストコ`ドを玉

いg侯で峰してg佩していくことにより、
屁尖されていく。そのY惚、壼い_kが辛嬬
となる。
? テストl嚔_kでは械にテストが原きまとう。

そのテストが房った宥りに嘛することに
を原けながら_kをMめていく
? そのY惚???

? 彭gにMめられるため、Y惚議にバグによる

り恬Iの富ない_kが佩える
? ツ`ルによって哈方にブラウザをO

協し、そのブラウザを軟咾靴謄謄
トを佩える
?テストコ`ドをく、というこ

とは兜豚誘Yが駅勣となる。兜
豚誘Yが指С栖ないような_
kではm喘すべきではない
? テストl嚔_kは參和の恬Iサイクルをか

くRり卦してプログラミングをMめていく
?
?

?
?

テストをく
音栽鯉_J
栽鯉_J
嶷}茅のためのリファクタリング
?g廾するC嬬をxび、そのため

のg悶テストをく。玉く、g
匯の尅る玲いを鵑砲垢襪戮
?テストコ`ドがバグを根んでい

る辛嬬來もある
?そういった辛嬬來も深]して、

糊えて音栽鯉テストをg仏する。
音栽鯉テストをg仏することで
コ`ドのF壓の彜Bを委燐する。
?テストを撹孔させる
?嶷}茅などコ`ドをリファク

タリングしてきれいにする。
?JavaScriptのテストフレ`ムワ`

クはたくさん贋壓する
?歌深として參和に箭をB初する
? テストを~えずg佩し恬Iフロ`にテストを

Mみzむことがわしい
JsUnit

厚仟がWく、仟しいプロジェクトにm喘
するには音鬚。Prototype.jsライブラリ
のために恬られていたこともあり、卆贋
しがち。

YUI

Yahooが恬撹したブラウザ坪テストフレ`
ムワ`ク

QUnit

jQueryチ`ムが_k。蚕y議なxUnitのO
に鯉に惄辰討い覆ぁ
? コマンドライン貧でテストをg佩できるが、

云桑コ`ドがg佩されないh廠でのテストと
なる
Crosscheck

厚仟されておらず、F壓の
ブラウザでは鬉任ない

Rhinoとenv.js

JQueryを恬った圭が_kし
たライブラリ
? 參和のツ`ルによる_kをB初する
JsTestDriver

gHのブラウザ、モバイルでもテスト辛嬬

EclipseやIntelliJ IDEAへのプラグインもある
Junitと札Q來のあるXMLレポ`トの竃薦も辛嬬。
JenkinsとのB亊もgに鬉任る

しかし硬いブラウザに鬉靴討い覆げ新屬發△襦
XMLHttpRequestオブジェクトを駅勣とするVar.7
參念のIEには鬉任ない
?4.1サ`バ`の軟
?4.2ブラウザにアクセス
?4.3テストg佩
?sudo

java -jar
$JSTESTDRIVER_HOME/JsTestDri
ver-1.3.5.jar --port 4224
?ブラウザで參和のアドレスにア

クセス
?http://localhost:4224
? cd

$JSTESTDRIVER_HOME/files/testdriven-javascript-developmentcode/00-main/case01/

? sudo

java -jar
$JSTESTDRIVER_HOME/JsTestDriver1.3.5.jar --tests all
? テストリスト

? 4で護り俳れる定はうるう定と登協する
? 擇燭世掘100で護り俳れる定はうるう定で

ないと登協する
? 曚燭世掘400で護り俳れる定はうるう定と
登協する
? 2004定は4で護り俳れるためc定
? 2100定は100で護り俳れるためc定でない
? 2000定は100で護り俳れるが400で護り俳れ

るためc定
? まずは払,垢襯僖食`ンでg佩する
? 秘薦デ`タ今

// main.js
function isLeapYear(year){
jstestdriver.console.log(year
);
if ((year % 4) == 0) {
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear':
function(){
var setYears = 7;
assertEquals(true,isLeapYear
(setYears));
}
}
)
秘薦デ`タ7のケ`スを弖紗
? Total

1 tests (Passed: 0; Fails: 1; Errors: 0)
(1.00 ms)
? Firefox 17.0 Linux: Run 1 tests (Passed: 1;
Fails: 0; Errors 0) (1.00 ms)
?
isLeapYearTest.test isLeapYear passed
(1.00 ms)
?
[LOG] 7
? 肝に撹孔パタ`ンでg佩する
? 秘薦デ`タ今

// main.js
function isLeapYear(year){
jstestdriver.console.log(year
);
if ((year % 4) == 0) {
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear':
function(){
var setYears = 8;
assertEquals(true,isLeapYear
(setYears));
}
}
)
秘薦デ`タ8のケ`スを弖紗
? Total

1 tests (Passed: 1; Fails: 0; Errors: 0)
(1.00 ms)
? Firefox 17.0 Linux: Run 1 tests (Passed: 1;
Fails: 0; Errors 0) (1.00 ms)
?
isLeapYearTest.test isLeapYear passed
(1.00 ms)
?
[LOG] 8
?

まずは払,垢襯僖食`ンでg佩する

// main.js
function isLeapYear(year){
jstestdriver.console.log(ye
ar);
if ((year % 4) == 0) {
if (year % 100 == 0) {
return false;
}
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear100': function(){
var setYears = 40;
assertEquals(true,isLeapYear(setYears));
},
}
)
秘薦デ`タ40のケ`スを弖紗
I圭撹孔してしまうケ`ス
? Total

2 tests (Passed: 2; Fails: 0; Errors: 0)
(0.00 ms)
? Firefox 17.0 Linux: Run 2 tests (Passed: 2;
Fails: 0; Errors 0) (0.00 ms)
?
isLeapYearTest.test isLeapYear4 passed
(0.00 ms)
?
[LOG] 4
?
isLeapYearTest.test isLeapYear100 passed
(0.00 ms)
?
[LOG] 40
// main.js
?あ
function isLeapYear(year){
jstestdriver.console.log(ye
ar);
if ((year % 4) == 0) {
if (year % 100 == 0) {
return false;
}
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear100': function(){
var setYears = 100;
assertEquals(true,isLeapYear(setYears));
},
}
)
秘薦デ`タ100のケ`スを弖紗
こちらはc定ではないので
Failsで卦ってくるはず
?
?
?
?
?
?

?
?

?
?
?
?

Total 2 tests (Passed: 1; Fails: 1; Errors: 0) (1.00 ms)
Firefox 17.0 Linux: Run 2 tests (Passed: 1; Fails: 1; Errors 0)
(1.00 ms)
isLeapYearTest.test isLeapYear4 passed (0.00 ms)
[LOG] 4
isLeapYearTest.test isLeapYear100 failed (1.00 ms):
AssertError: expected true but was false
.test
isLeapYear100@http://localhost:4224/test/test/isLeapYear.js:9
[LOG] 100
Firefox 17.0 Linux: Run 2 tests (Passed: 2; Fails: 0; Errors 0)
(0.00 ms)
isLeapYearTest.test isLeapYear4 passed (0.00 ms)
[LOG] 4
isLeapYearTest.test isLeapYear100 passed (0.00 ms)
[LOG] 40
?//

main.js
?function isLeapYear(year){
? jstestdriver.console.log(year);
? if ((year % 4 == 0) || (year % 100 != 0)) {
?
return true;
? }
? return false;
?}
// main.js
function isLeapYear(year){
jstestdriver.console.log(yea
r);
if ((year % 4 == 0) ||
(year % 100 != 0)) {
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;
assertEquals(true,isLeapYear(setYea
rs));
},
'test isLeapYear100': function(){
var setYears = 100;
assertEquals(true,isLeapYear(setYea
rs));
},
}
)
?
?

?
?
?
?

Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1.00 ms)
Firefox 17.0 Linux: Run 2 tests (Passed: 2; Fails: 0;
Errors 0) (1.00 ms)
isLeapYearTest.test isLeapYear4 passed (0.00 ms)
[LOG] 4
isLeapYearTest.test isLeapYear100 passed (1.00 ms)
[LOG] 100

?

秘薦デ`タ4は撹孔c定
秘薦デ`タ100は払。c定ではない

?

となるはず???

?

おかしい

?
// main.js
function
isLeapYear(year){

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;

jstestdriver.console.log
(year);
if ((year % 4 == 0) &&
(year % 100 != 0)) {
return true;
}
return false;
}

assertEquals(true,isLeapYear(setYears)
);
},
'test isLeapYear100': function(){
var setYears = 100;
assertEquals(true,isLeapYear(setYears)
);
},
}
)
?
?

?
?
?
?

?

?

Total 2 tests (Passed: 1; Fails: 1; Errors: 0) (0.00 ms)
Firefox 17.0 Linux: Run 2 tests (Passed: 1; Fails: 1;
Errors 0) (0.00 ms)
isLeapYearTest.test isLeapYear4 passed (0.00 ms)
[LOG] 4
isLeapYearTest.test isLeapYear100 failed (0.00 ms):
AssertError: expected true but was false
.test
isLeapYear100@http://localhost:4224/test/test/isLea
pYear.js:8
[LOG] 100

撹孔
// main.js
function isLeapYear(year){

jstestdriver.console.log(ye
ar);
if(year % 400){
return true;
} else if ((year % 4 == 0)
&& (year % 100 != 0)) {
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear100': function(){
var setYears = 100;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear400': function(){
var setYears = 200;
assertEquals(true,isLeapYear(setYears));
},
}
)

秘薦デ`タ200のケ`スを弖紗
こちらはc定
Total 3 tests (Passed: 1; Fails: 2; Errors: 0) (1.00
ms)
? Firefox 17.0 Linux: Run 3 tests (Passed: 3; Fails:
0; Errors 0) (1.00 ms)
?
isLeapYearTest.test isLeapYear4 passed (0.00
ms)
?
[LOG] 4
?
isLeapYearTest.test isLeapYear100 passed
(1.00 ms)
?
[LOG] 100
?
isLeapYearTest.test isLeapYear400 passed
(0.00 ms)
?
[LOG] 200
?
?

壅業テストを佩い、撹孔を_Jする

// main.js
function isLeapYear(year){
jstestdriver.console.log(ye
ar);
if (year % 400 == 0 ||
(year % 4 == 0 && year %
100 != 0)) {
return true;
}
return false;
}

// isLeapYear.js
TestCase("isLeapYearTest", {
'test isLeapYear4': function(){
var setYears = 4;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear100': function(){
var setYears = 100;
assertEquals(true,isLeapYear(setYears));
},
'test isLeapYear400': function(){
var setYears = 400;
assertEquals(true,isLeapYear(setYears));
},
}
)
?
?

?
?
?

?
?
?

?

Total 3 tests (Passed: 2; Fails: 1; Errors: 0) (2.00 ms)
Firefox 17.0 Linux: Run 3 tests (Passed: 2; Fails: 1;
Errors 0) (2.00 ms)
isLeapYearTest.test isLeapYear4 passed (1.00 ms)
[LOG] 4
isLeapYearTest.test isLeapYear100 passed (1.00 ms)
[LOG] 100
isLeapYearTest.test isLeapYear400 failed (0.00 ms):
AssertError: expected true but was false
.test
isLeapYear400@http://localhost:4224/test/test/isLea
pYear.js:13

[LOG] 400
テストを
く
リファクタリン
グ

音栽鯉_J

栽鯉_J

More Related Content

Java scriptによるテストl嚔_k