関ジャバに行ってきたメモ

関ジャバの集いに参加してきました。
簡単にですが、以下Pomeraでメモった内容をアップ。


■最初のご挨拶
1年6回はやる、たとえ参加者がいなくとも!
次回は1月後半
詳しくはJUGGUGで告知


■2010年Javaの旅
・Java7の存在意義
Javaを取り巻く環境】
 GAE/J. Android(DalvikVM), OpenJDK, Oracle
 JCPではなくこれからはGoogleJavaを牽引?

・OpenJDK
JDK7,OpenJDKはほぼ同一ソース
 ソースの参照や改変依頼が容易になる?
 OOS化がJDK7のリリース遅れを生み出している

Oracleによる買収
1.Modularity
・public is too public
特定モジュールの中だけで使いたいものだけアクセス指定したい。
→moduleキーワード導入
 muduleクラス,moduleメソッドはそのモジュールからのアクセスのみ。

・JARの依存が複雑
JARの依存を動的解決(Mavenのようにとってくる)
ビルド担当者、デプロイ担当者が難色?はまりそう。

2.動的言語対応
JRuby遅い
 動的言語はコンパイル時に型が決まらないから
 理由:呼び出すメソッドが不明確。実行時に解決する必要があるため。

・invokedynamicの導入
要するに高速なリフレクション
JVM上で動く言語の開発者、大喜び

3.その他(たくさん)
tryを使ってclose不要に
数値リテラルの改善
数値にバイナリ
ListやMapの初期化を簡単に記述

ListやMapの宣言を簡単に
Map> map = new Map<>;

・fork/joinフレームワーク
複数スレッドの動機
新しいファイルシステム
→ファイル属性の変更・取得
→ファイルの更新管理
→ディレクトリのウォーキング

☆開発者のための開発者にとって嬉しい変更が多い。


■G* in Action
githubにも公開しています
GroovyはJSR241仕様
開発環境
groobysh
groovyConsole
GroovyEclipse ・・・2.0から良くなった。おすすめ。

List
each
eachWithIndex ・・・インデックス付で
find ・・・List内のマッチング
findall
collect
*.upperCase

File I/O
.text
.getText('UTF-8')
.write
<<
.toURL().text でHTMLページの情報が取得できる

SQL も簡単に使えるよ
COM
MSオフィスなどを操作できる
POI
@Grab group,module,version
実行時にlibraryをダウンロードしてくれる

UnitTestも簡単 GroovyUnitTestみたいなのがある

フレームワークとか
Grails
プラグイン豊富
Gaelyk
GAE/J Groovy tool kit
Griffon
Swing, JavaFX

Groovyインアクション読書会
11/21 場所:クロノスさんとこ


■テストのニュージェネレーション
・JUnit3
 いわゆるユニットテスト
弱点:
 ステートレス
 例外テストが複雑
例)

try{
  fail();
}catch(Exception expected){
  assertTrue(true);
}

 引数が渡せない

TestNG
 ユニットテストにとどまらない
 TestNGについての情報は作ってるCedricさんとこのブログ参照してね
 → Otaku, Cedric's blog 注目は「おたく」らしいです
 JUnit4はTestNGからインスパイアされた

TestNG
ステートフル
@Test
@BeforeMethod/@AfterMethod
@BeforeClass/@AfterClass
@BeforeTest/@AfterTest
@BeforeSuite/@AfterSuite
expectedExceptions ={RuntimeException.class}
設定ファイル(xml)
→テストプログラムと実行方法を分離する

データ駆動テスト
DataProvider

@Test(dataProvider = "add")
public void verifyAdd(int a, int, int expected){ ...

@DataProvider(name = "add")
public Object[][] data(){
  return new Object[][]{{1,2,3}, {2,3,4}};
}

マルチスレッドテスト
 @Test(invocationCount = 5, threadPoolSize = 3)
 テストを並列実行できる
 テストのグループ化
 テストに依存関係を持たすことができる
 @Test(groups = "first")
 @Test(groups = "second", dependsOnGroups= "first")
 @AfterGroup
 XMLを書く必要あり

・JUnit4
@BeforeClass/@AfterClassはstatic
@Test(expected = java.lang.RuntimeException.class)
JUnit4で引数
 コンストラクタから渡すしかない

まとめ
 各テストは独立すべき?
 →ユニットテストではそう。

詳しくは@ITの次世代テストフレームワークを見てね