RhinoUnit作ってみた
       2010/01/29
     SATO Tomoyuki
   Ariel Networks, Inc.
前半の発表で、Rhino用に
 書いたJavaScriptのコードを
JUnitでテストできそう、という
      話をしました
言っただけでは説得力が
    ないので
 実際にやってみました
What's Rhino?
JavaによるJavaScript実装
OSSとしてMozillaが開発
スクリプトエンジンとしてJavaプログ
 ラムに組み込める
JavaSE6には標準で入ってます
イメージのつかない人はScalaの親...
想像図
では早速RhinoUnitを
 動かしてみましょう
demo
ここに至るまでの経緯
最初の実装案
var tc = new Packages.junit.framework.TestCase({
  testHoge: function() {
      // test code here...
  },
  testFug...
tc.setName('testHoge');

      ↑こいつのおかげで
testHogeメソッドしか実行されない
次の実装案
var tc1 = new Packages.junit.framework.TestCase({
    testHoge: function() {
         // test code here...
    }
});...
$ java org.mozilla.javascript.tools.shell.Main test.js

testFuga(adapter1)junit.framework.AssertionFailedError:
Method "te...
?
var tc1 = new Packages.junit.framework.TestCase({
       testHoge: function() {
              // test code here...
       ...
このあたりで
JavaScriptでTestCaseを
 直接継承するのは断念
最終的に辿り着いた実装
 テストスイートを組み立てる部分はJavaで書く
  ことにした
 JUnitのjunit.textui.TestRunnerを継承して拡張
 書いたクラスは2つだけ
  • ScriptingTestRunner...
Code Reading
今後
 junit.swingui.TestRunnerを拡張してGUIを付
  けてみる
 JUnit4のassertThatとかを使いたい
  – アノテーションってJavaScriptでどう書くんだ?

・・・などを気が向いたら試して...
まとめ

(テストツールが)ないんだったら
自分で作ればいいのよ!
本日の資料とRhinoUnitのソースは
近いうちにブログにて公開予定です

 http://dev.ariel-networks.com/

     Follow me on Twitter!
           @Yazin
ご静聴?ありがとう
 ございました
Upcoming SlideShare
Loading in …5
×

ありえるえりあ勉強会@五反田~テスト編~ Part3

1,806 views
1,712 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,806
On SlideShare
0
From Embeds
0
Number of Embeds
430
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

ありえるえりあ勉強会@五反田~テスト編~ Part3

  1. 1. RhinoUnit作ってみた 2010/01/29 SATO Tomoyuki Ariel Networks, Inc.
  2. 2. 前半の発表で、Rhino用に 書いたJavaScriptのコードを JUnitでテストできそう、という 話をしました
  3. 3. 言っただけでは説得力が ないので 実際にやってみました
  4. 4. What's Rhino? JavaによるJavaScript実装 OSSとしてMozillaが開発 スクリプトエンジンとしてJavaプログ ラムに組み込める JavaSE6には標準で入ってます イメージのつかない人はScalaの親 戚とでも思ってください
  5. 5. 想像図
  6. 6. では早速RhinoUnitを 動かしてみましょう
  7. 7. demo
  8. 8. ここに至るまでの経緯
  9. 9. 最初の実装案 var tc = new Packages.junit.framework.TestCase({ testHoge: function() { // test code here... }, testFuga: function() { // test code here... } }); tc.setName('testHoge'); Packages.junit.textui.TestRunner.run(tc);
  10. 10. tc.setName('testHoge'); ↑こいつのおかげで testHogeメソッドしか実行されない
  11. 11. 次の実装案 var tc1 = new Packages.junit.framework.TestCase({ testHoge: function() { // test code here... } }); tc1.setName('testHoge'); var tc2 = new Packages.junit.framework.TestCase({ testFuga: function() { // test code here... } }); tc2.setName('testFuga'); var suite = new Packages.junit.framework.TestSuite(); suite.addTest(tc1); suite.addTest(tc2); Packages.junit.textui.TestRunner.run(suite);
  12. 12. $ java org.mozilla.javascript.tools.shell.Main test.js testFuga(adapter1)junit.framework.AssertionFailedError: Method "testFuga" not found (訳:testFugaなんてメソッド知らねーよ)
  13. 13.
  14. 14. var tc1 = new Packages.junit.framework.TestCase({ testHoge: function() { // test code here... } }); tc1.setName('testHoge'); var tc2 = new Packages.junit.framework.TestCase({ testFuga: function() { // test code here... } }); tc2.setName('testFuga'); print(tc1.getClass().getName()); // -> "adapter1" print(tc2.getClass().getName()); // -> "adapter1" なんか継承のされ方がおかしい
  15. 15. このあたりで JavaScriptでTestCaseを 直接継承するのは断念
  16. 16. 最終的に辿り着いた実装  テストスイートを組み立てる部分はJavaで書く ことにした  JUnitのjunit.textui.TestRunnerを継承して拡張  書いたクラスは2つだけ • ScriptingTestRunner (extends TestRunner) • ScriptingTestCase (extends TestCase)  JavaScriptで書いたテストケースをevaluateし た結果をScriptingTestCaseに入れて実行
  17. 17. Code Reading
  18. 18. 今後  junit.swingui.TestRunnerを拡張してGUIを付 けてみる  JUnit4のassertThatとかを使いたい – アノテーションってJavaScriptでどう書くんだ? ・・・などを気が向いたら試してみるかもしれません
  19. 19. まとめ (テストツールが)ないんだったら 自分で作ればいいのよ!
  20. 20. 本日の資料とRhinoUnitのソースは 近いうちにブログにて公開予定です http://dev.ariel-networks.com/ Follow me on Twitter! @Yazin
  21. 21. ご静聴?ありがとう ございました

×