もくろみがぁw

 TestLinkCnvMacroで仕様書を書いてインポートして、そのテストケースごとにテスト用ソースを書いて、TestLink Adapterで結果を自動反映させようと思っていた。けど・・・かおるんさんの記事をよくよくみたら、TestLink Adapterでテストケースの自動登録してるじゃないですかorz
 自動テストのテストケースはTestLink Adapterで登録して手動テストはTestLinkCnvMacroを使用して登録ということになるのかな?
 自動テストの元ネタをTestLinkCnvMacroでと思ってた目論見がみごとに砕けたw

環境づくり

環境を作った際のメモ書きです。幾つかの手順はなくてもいいかしれない。

  1. all_in_one_testlinkjp_20081027_174.exeとtestlink_1.8.1.zipをダウンロード
  2. all_in_one_testlinkjp_20081027_174.exeを実行してC:\にインストール
  3. インストール先のxampp_start.exeを実行し起動
  4. Webで動作確認
  5. xampp_stop.exe
  6. htdoc/testlinkを退避
  7. testlink_1.8.1.zip解凍してhtdocに配置
  8. 退避先のファイルconfig_db.inc.phpをコピー
  9. WebでInstallのURLを指定して更新処理
  10. WebでTestLinkにログインして更新を確認
  11. 画面に警告がでているのでログを確認
  12. 対応できるところだけ修正し、設定ファイルを修正しSILENTモードに
  13. 設定ファイルがどれだかわからなかったのでGrepして見つける
  14. 書き換える前にxampp_stop.exeを実行
  15. Grepでみつけたconfig.inc.phpを修正
  16. installのフォルダを削除
  17. xampp_start.exe
  18. WebでTestLinkにログインして警告が無くなっているのを確認


1.8.1にしたのはTestLinkAdapterを使用したいためです。

環境に悩む

 TestLinkAdapter と TestLinkCnvMacro を使用したい。TestLinkAdpaterはTestLinkTestLink 1.8.1 以上を対象としているらしい。一方、TestLinkCnvMacro は1.7.4-1.7.5を対象としているらしい。
 両方を同じバージョンのTestLinkで使えない・・・。
 TestLinkCnvMacroのReadmeをみてると幾つかの機能は1.8でつかえるようだけどね。とりあえず試してみるしかない状況。

調査開始

 2年前に興味を持ち少しだけ触ったTestLinkを本格的に今のプロジェクトに適用しようと思います。2年前にくらべて色々な情報をBlogを中心してありますし敷居は低くなっていると思うからです。とりあえず直近のゴールとして、.NET系の開発なので、NUnitを用いた自動テストの結果をTestLinkに反映させることが目標です。あとは、シナリオをExcelで作成しインポート。Tracとの連携あたりかなと思います。あとは経過をここにかければなと思っています。

Loggerクラスはスレッドセーフじゃなかった

Logger.GetLoggerがJava版とちがってスレッドセーフじゃないことを今日同僚が発見した。S2のLoggerクラスが保持してるHashtableはHashtable.Synchronized でOKなんですが、GetLoggerメソッドが排他制御をしていないためにほぼ同時に同じTypeを渡してコールした場合に例外を吐く可能性があります。S2Container.NETがLoggerクラスを使用する場合はこの現象が起きない書き方(Staticなメンバーで宣言)しているのでわかる範囲で問題がありません。なおかつ一度Loggerクラスが保持しているHashtableにエントリーが出来てしまえば現象は起きません。

というわけでアプリ側でS2Container.NETのLoggerを使用する場合は少々気をつける必要があります。
とりあえず対応として

  1. S2Container.NETのLoggerは使用せず log4netを直に使用する。
  2. S2Container.NETの使用方法でLoggerを使用する。(Staticなメンバーとして使用)
  3. 下駄クラスを作成して排他処理を行う。


そもそもアプリ側でLoggerクラスは使用しないのが作法でしたらごめんなさい。あと対応してもらうよう明日にでもMLに投稿しようかなと

接続文字列に悩む(解決編?)

試行錯誤して動いてるので、この対応方法で行こうと思います。

接続文字列が確定した段階で

protected SelectableDataSourceProxyWithDictionary dataSourceProxyWithDictionary;

使用箇所のクラスにSelectableDataSourceProxyWithDictionary変数を定義しQuillでdataSourceProxyWithDictionaryをバインドしてもらいます。

var ds = dataSourceProxyWithDictionary.DataSourceCollection["hoge"] as TxDataSource;
ds.ConnectionString = "hogehoge"
 

そして、使用箇所のメソッド内でTxDataSourceを引っ張ってきて、接続文字列を設定しています。