JUnit実践入門第4章を読んでみた
ゆっくりーとですがじわじわ読んでいます。
というわけで読んだことを忘れないうちにメモ。
第4章を読んで覚えたこと
- AssertクラスとCoreMatchersクラスを組み合わせて利用することで自然言語に近いアサーションコードが記述可能になる。
- (JUnit4の)アサーションメソッドはassertThat()とfail()の2つと思ってよい。assertEquals()とassertTrue()は過去バージョンとの互換性のために残ってるだけ。
- CoreMatchersクラスのisメソッドにnullを指定することはできない。中身がnullであることを検証したい場合はCoreMatchersクラスのnullValueメソッドを利用する。
- 必要に応じてカスタムMatcher APIを自作できる(本章に作例あり)。
気になったこと
カスタムMatcher APIはテストしなくていいのかな…というのがちょっと気になりました。
でも本筋とは関係ないし気にしなくてもいいのかな。
実践
せっかくなのでnullValueメソッドを使うサンプルコードを書いてみました。
// テスト対象のクラス package junit.test; public class PersonalData { private String name; public PersonalData() { this.name = null; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
// テストクラス import org.junit.Test; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import junit.test.PersonalData; public class PersonalDataTest { @Test public void PersonalDataクラスのnameフィールドがデフォルトの場合nullである() { // Setup PersonalData sut = new PersonalData(); // Exercise String actual = sut.getName(); assertThat(actual, is(nullValue())); } @Test public void PersonalDataクラスのnameフィールドにTonyを設定できる() { //Setup PersonalData sut = new PersonalData(); // Exercise String expected = "Tony"; sut.setName("Tony"); String actual = sut.getName(); assertThat(actual, is(expected)); } }
2つのテストは無事に通過することができました。めでたしめでたし。
さくらのレンタルサーバ(スタンダード)にRuby on Railsをインストールしてみた
2013年6月24日時点での情報です。将来も同じ方法でうまくいく保証はありません。
(現に、参考にしたサイトの通りにやってもうまくいかない部分がいくつかありました)
やることはざっくり箇条書きすると以下の3点。
rubygemsをインストールする
Teratermなどのターミナルエミュレータでさくらのサーバにログインした後、
ftpコマンドで http://rubyforge.org/ から最新版のrubygemsをダウンロードします。
%ftp http://rubyforge.org/frs/download.php/76729/rubygems-1.8.25.tgz
ダウンロードが完了したらtarコマンドで展開し、作成されたディレクトリ配下に移動して
setup.rbを実行します。prefix=$HOMEを付け忘れないことが大事。
%tar -zxf rubygems-1.8.25. %cd rubygems-1.8.25 %ruby setup.rb --prefix=$HOME
環境変数などを設定する
(デフォルトがcshなので)$HOME/.cshrcを編集します。
set path = の行に$HOME/bin $HOME/lib/ruby/gem/binを追加する
わたしの場合は以下のようになっていました。
いつどれを追加したのかは覚えていないけど、とにかく上の2つを追加できてればOKかと。
set path = (/sbin /bin /usr/sbin /usr/bin usr/games usr/local/sbin /usr/local/bin usr/X11R6/bin $HOME/bin $HOME/local/bin $HOME/lib/ruby/gem/bin)
My Tracksのすすめ
https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks&hl=ja
主な特徴は(たぶん)以下のとおり。
・無料
・GPSを利用した移動経路の記録
・標高と移動速度をグラフ表示
・統計情報では「距離」「合計時間」「平均速度」「最大速度」が閲覧可能
・上記情報をGoogleアカウントを通して他のGoogleサービスやTwitterなどで共有可能
個人的には、先日解約して使い道がなくなっていたT01CでMy Tracksが使えるのでサイクルコンピュータを新しく買う必要がなくなったことが嬉しい。
Eclipseで"Editor does not contain a main type"エラー
javaのコンパイル時に"Editor does not contain a main type"というエラーが出たら、
mainメソッドにアクセス修飾子publicが指定されているかどうかを確認すること。
関係スキーマと関数従属性から候補キーを見つけるには
「候補キー 合併律」でググったら出てきた以下のページが大変参考になった。
http://jis.hatenablog.com/entry/20100130/1264839295
手順はまとめると次の通り。
1)矢印の始点となる属性を列挙する
2)(1)の中から、被従属している属性を排除する
例えば関係スキーマR(A, B, C, D, E)があり、関数従属A->BC, CD->Eが成り立つとする。
これに上記の手順を当てはめると次のようになる。
1)矢印の始点となる属性は{A, C, D}
2)CはA->BC( A->B, A->C)の関数従属が成り立つことから被従属属性なので排除する
よってこの関係Rの候補キーはAとDである。
memo
スーパースカラ
CPUのアーキの一種。複数のパイプラインを用意して同時実行するのが特徴。
DMA
Direct Memory Accessの略。メモリとメモリまたはメモリとI/Oデバイスで直接やり取りする手法のこと。
セマフォ
資源の競合をなくすための排他制御。P操作(wait()、ロック)とV操作(signal()、アンロック)があるらしい。
垂直分散システム
ホスト・コンピュータがすべての処理を担当し、処理結果を複数のクライアントマシンに表示する形式のシステム。
フールプルーフ
システム設計の考え方の一つ。誤操作があってもシステムに問題が起こらない安全設計にすること。
フェールソフト
システム設計の考え方の一つ。装置の一部が故障しても、システムの全面停止とならないようにすること。
フォールトトレランス
障害耐性。装置の一部が故障してもシステムが問題なく稼働し続けること。
フォールバック
縮退運転。サービスのレベルを低下させてでもシステムの稼働を維持し続けること。