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

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

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

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

Q&A

解決済

1回答

654閲覧

Visual Studio 2015 Professionalの単体テストのメソッド差し替え方法

JanTh1989

総合スコア87

C#

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

0グッド

0クリップ

投稿2019/03/06 07:09

<前提>
C#プロジェクトの単体テストコード作成を行っています。
単体テストはMSTestで行っています。
テスト対象関数が呼び出す関数は、Mockクラス使用で関数処理差し替えをしています。

Mock使用では、public以外のクラス、関数やvirtual修飾子無しでは差し替えることができないため、テスト対象関数名などのシンボル定義名の場合のみに制限を掛けるなどして、修飾子切り替えなどを行っています。
例)
●テスト対象関数

C#

1public void Method1(){}

●テスト対象関数が呼び出す関数

C#

1#if TEST_METHOD1 2 public virtual void Method2() 3#else 4 private void Method2() 5#endif 6 {}

Method1がテスト対象関数の場合のみ、条件付きコンパイルシンボルにTEST_METHOD1を入れてリビルドしてテストを実行します。

そのほか、関数内で別クラスのインスタンスを生成して使用するような動作をする関数テストでは、インスタンス生成対象のクラスにユニットテスト用クラスを作り、関数修飾子と同様にシンボル定義でクラスや実行結果を切り替えるようにしています。

<質問内容>
テスト手順の削減を行う方法は何かないでしょうか?
今のテスト手順が「条件付きコンパイルシンボル変更」⇒「ビルド」⇒「テスト実行」と、手順が多いほか、1回実行でテストケースの全網羅ができません。
Stub、Shimなどは見かけたのですが、Visual StudioのProfessionalは対象外だそうなので、検討が行き詰ってしまっております。

<補足情報>
プロジェクトのクラスに一律インターフェースを設けてデリゲートで、という方法案は調査していて見つかりました。
ただ、実処理コードは一旦完成の位置づけとなり、テストで困っているから構造見直しからやり直す、というのは作業期間や客先再レビューが困難なため、対応は見送りとしています。
実処理コード側のクラスファイルの編集については、既存の#ifなどによる修飾子切り替え処理を変更・削除するくらいが許容されます。

<開発環境>
・.Net Framework 4.6
・Visual Studio 2015 Professional

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

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

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

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

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

guest

回答1

0

ベストアンサー

ただ、実処理コードは一旦完成の位置づけとなり、テストで困っているから構造見直しからやり直す、というのは作業期間や客先再レビューが困難なため、対応は見送りとしています。

実処理コード側のクラスファイルの編集については、既存の#ifなどによる修飾子切り替え処理を変更・削除するくらいが許容されます。

完成したならテストしなくていいのでは?
保守するなら書き換えていいのでは?

内容や納期次第では方法がいくつか考えられますが、時間もなく、どこまで手を入れていいかもわからず、コードも闇の中の状態でどうにかしろと言われても困ります。#if でどうにかなっているのならそれでいいんじゃないでしょうか。もうそんな頻繁にテストしないでしょう?

投稿2019/03/06 13:35

Zuishin

総合スコア28660

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

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

JanTh1989

2019/03/06 13:49

回答ありがとうございます。 伝え方が悪かったです。すみません。 実処理コード一旦完成というのは、PG工程はひとまず終え、実処理コードレビューまではした、という状況になります。 その後、単体テストに及ぶため、仕様書およびテストコードの作成が今、という状況です。 また、このプロジェクト自体が、一次開発、二次開発~...n次開発と拡張させます。 そして、今にしても、今後の拡張にしても、単体テスト方法が今よりいい方法がないだろうか、という依頼元要望があり、検討してみようということとなりました。
JanTh1989

2019/03/08 04:58

コマンドラインでのテストは非常に良いものだと思いました。 ビルドにMSBuild.exe、テスト実行にvstest.console.exe、カバレッジ取得にOpenCoverとReportGeneratorで行こうかと考えています。 自作マクロツール+自作バッチで、シンボル定義数だけループして実行するような一連動作を目標に作業を進めていきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問