MOCKの用語の備忘録です
クオリティ重視ではないのでご了承のほど。
ちょろっとMOCKについて説明も書いておきます。(自分への戒めのため)
ここではJunit
向けの話になりますのでご了承ください。
MOCKってなんぞや
・わかりやすくいうと**「はりぼて」**です。
例えば下記のようなクラスとメソッドがあったとします。
public class simple(){
public sinplemethod(int testcolumn){
if(int testcolumn=0){
return id =123;
}elseif(testcolumn=1){
return id =1234;
}else{
return id=0
}
}
上記の場合はtestcolumnの値によって結果が変わる簡易なsimpleメソッドです。
※実際にはこんな変数名付けたらだめですよ~。
この時、この機能を使用している別のメソッドをテストしたいと思ったとき、
一回一回値を設定するのは非常に手間です。
そこで疑似的に出力される値を設定するために使うのがMockになります。
Mockの利便性
先人がわかりやすく使用方法は伝えているため
私の記事ではMockの理解方法について。
上記の例で行くと、testcolumnが0の時にid=123と返されます。
あらかじめ@Mockedないしは@Mockと該当のクラスをMockに設定しておけば
返す値をテストコード側で設定できます。
というのが簡単な概要。
わかりやすく書くんならこう
package sample.jmockit;
import org.junit.Test;
import mockit.Mocked;
public class JMockitTest {
@Mocked
private Simple simple;
@Test
public void test() throws Exception {
assertEquals(1234,simple(1));
}
}
※引数に1を渡したら1234が帰ってくるかの確認のためのテスト
中の1を0に変えたら123が帰ってくるか、等の確認も繰り返しできる。
~~正直上のが動くかわかんない~~~
※あくまで使いかたの一例です。
Mockがとらえにくい人向けに書いてるのですごいおおざっぱな説明です。
簡単な説明でしたが、先人たちがかなりわかりやすい記事を書いているので
参考にどうぞ。
Mock 使い方 Javaとかでググったら
かなり出てくるんでJavaユーザの方はおすすめです。
(C#とかは知らん。でも結構出てくる)
ここから備忘録なので興味ない方はスキップもしくはブラウザバックでどうぞ
@Mocked
上記のアノテーションを指定して生成したインスタンスは、モックのメソッドやコンストラクタの実装は空になり、利用するメソッドに対してnew Expectations() {...}で動作を設定できる。
つまりExpectations(){...}で中身を決めれば値が設定し放題。やったね。
@Test
public void なメソッドに付与することでJUnitにテストメソッドであることを認識させるアノテーションらしい。
time out を付けると「制限時間」が設けられる。 負荷テストとかに役立ちそう。
@Ignore``@Disabled
見たことないけど一時的にテストを無視できるらしい。
コメントアウトでよくね?
@BeforeEach
これがついているメソッドは各テスト実行前に毎回実施される。
つまり初期化とかをここに置けば毎回初期化されるから網羅テストするときとかに便利。
@Beforeall
これがついているメソッドはテスト実行前に必ず実施される。
'@AfterEach'
これがついているメソッドは各テスト実行後に毎回実施される。
つまり初期化とかをここに置けば毎回初期化され()
@Injectable
特定のインスタンスのみモックする
@Mocked
全てのインスタンスをモックする
injectableとMockedの違いはここがわかりやすいかも
基本的なJunitの書き方
1.インポート
2.テストクラス作成
3.InjectableもあればInjectable
4.Before処理があればBefore処理
5.testクラスかいてMockにしたメソッドを書いて、期待できる動作を書く。
6.実際にメソッド呼び出す。
7.assertで結果と一致してるか確認
実際の例は下記を参照すると良し。
JMockit使い方メモ
https://qiita.com/opengl-8080/items/a49d4dae9067413ccdd6
リフレクションとかも書きたいのだけどこのへんで。
先人の皆様ありがとうございます。