質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1604閲覧

単体テストの観点から見たInterfaceの必要性について

zun-zun

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2018/03/18 07:32

Interfaceの必要性について教えて頂きたいです。

Interfaceのメリットがある一例として、以下のものは理解しています。
・Interfaceの実装が増えた場合、利用側は意識せず利用できる。
すなわち、疎結合とすることで変更に強いアプリケーションにできる。

ですが時々Interfaceのメリットについて"テストの容易さ"と回答するサイトを見ます。
Interfaceの実装が複数ある場合は分かりますが、
実装クラスが1つのみの場合(そして今後も実装クラスが増えることはない)でも
同じ回答をしているサイトを見ました。

Moqライブラリなどはクラスもモックにできるので
実装クラスが1つのみの場合、Interfaceを用意する必要がないと思うのですが、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

テストする側から見るとInterfaceは、テスト対象クラスのオブジェクトをプログラムから操作もしくは観測できる事の外部仕様です。

そうした仕様が明確化されているクラスと、コードを読み解かないと何ができるか判らないクラス、どちらのクラスがテストしやすいと思われますか。

・どうせクラスのコードを読むから一緒と思われる方にとっては、Interfaceの必要性は無い(少なくともテストの観点からは)。
・テストで使えるものと使えないものが書き分けられていたほうが判りやすいと思われる方にとっては、Interfaceの必要性(有用性)は有る。

テストする方のコードを読み解くスキルによって、あるいはクラスのコードの書かれ方(読みやすさ、複雑さ)によって、感じ方は違ってくると思いますが、Interfaceが有用であると思う方は少なからず居ると考えます(私がInterfaceが有用だと思うからかもしれませんが)。

投稿2018/03/18 09:01

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

質問者様の「テストの容易さ」の解釈がずれているように感じました。
「テスト(実施)の容易さ」と捉えられているのではないでしょうか?

仰るように実装クラスが1つであれば、Interfaceがあろうとなかろうと、テストを実施することについて何も変わりません。

ここで言う「テストの容易さ」というのは「テスト(を見通すこと)の容易さ」です。
Interfaceがあれば、いざ実装時にズレが生じることもありません。
開発者全員がきっちりやっておけば、そういったことも生じませんが、実際には軌道修正が付き物です。

制約の厳しい決め事があれば、揺らぎが少ないのは当然ですので。

投稿2018/03/18 16:21

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zun-zun

2018/03/19 22:35

おっしゃる通りです、テスト実施の容易さと解釈していました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問