デザインパターン テスト駆動開発 プログラミング Java

SingletonパターンをJUnitでテストする

投稿日:2020年7月30日 更新日:

シングルトンパターンはインスタンスが1つであることを保証する設計です。
Junitを使って、本当に1つだけなのかを検証してみます。
またその手順をテスト駆動開発に従った手順(RedGreen→リファクタリング)で行います。

テストコード

2つのインスタンスを生成し、assertThatで比較します。

Red

Singletonクラスを作成し、自身のインスタンスを保持するフィールド(_singleton)を設定します。
getInstanceメソッドで取得できるようにstaticとし、自身のインスタンスをnew Singleton()でリターンします。

テストを実行すると、2つのインスタンスの参照が異なるため別物だと判断されRedになります。

Green

インスタンスの生成は、_singletonフィールドがnullである場合のみとします。
そうすれば生成されるインスタンスは1つだけにできます。(修正箇所 参照)

テストを実行してみましょう。
Greenになります。

リファクタリング

Greenになったのであれば、リファクタリングができます。
2つほどリファクタリングしてみます。

スレッドセーフ化

シングルトンパターンで議論される話題として、スレッドセーフであることが挙げられます。
よく見ると、synchronized がありませんので、これを追加しましょう。

追加修正後、テストを実行するとGreenであることが確認できます。

フィールド名

_sigletonを別の名前に変えてみましょう。
_instance としてみます(getInstanceメソッド内の変更も行います)。

テストを実行するとGreenであることが確認できます。
もしRedになったのであれば、どこかに修正誤りがあるので確認してみてください。

まとめ

・シングルトンパターンはインスタンスが1つであることを保証する設計である。
・テスト駆動設計においては、RedGreen→リファクタリングの順で行う。

ソースコード

Github

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-デザインパターン, テスト駆動開発, プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

AWSへWebアプリケーション(Java)をデプロイする方法(書籍紹介)

対象者 ・個人開発者 ・ポートフォリオ作成者 手順 こちらの書籍を参考に私自身がAWSにデプロイした手順です。 書籍では図解もあってわかり易く解説されているので、ここでは流れを簡潔に説明します。 すで …

Git BashでUniCodeに文字化けする時の対処法

大変参考になったサイトのエイリアスです。 git diff や git status での日本語の文字化けを防ぐ (core.page, core.quotepath) 私は自分のブログをリファレンス …

【Bootstrap】入力フォームを作成しよう!

概要 SpringBootチュートリアルで作成した各画面の入力フォームをBootstrapに置き換えます。 また、containerを使用することで容易にグリッドシステムを導入できます。 実装 検索画 …

no image

【JdbcTemplate】Queryの書き方(SELECT文)

JdbcTemplateでQueryを書く方法です! (SELECT文で、1件・複数件を取得するケース)   前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で …

Jacksonで日付がずれる場合、Timezone設定を直す

現象 JacksonでCSV出力する際、日付がズレて出力される。   原因 タイムゾーンの設定がTokyo/Asiaになっていない。   対策 application.proper …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。