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

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

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

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

Q&A

2回答

1830閲覧

自動テストする前に、手動でコメントアウトしたくない

meshkit

総合スコア72

C#

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

0グッド

0クリップ

投稿2018/03/16 01:36

前提・実現したいこと

Visual Studio 2015 ProとMSTestでテストをしています。
手動でデバッグするときに、

該当のソースコード

C#

1[Conditional("DEBUG")] 2public static void TestFillTextBoxes() 3{ 4 if (string.IsNullOrEmpty(Name.Text)) Name.Text = "ミスミミコト"; 5 //以下100項目くらい 6}

というコードをコンストラクタで呼んで、テキストボックスに文字を埋めています。

MSTestで、テキストボックスが空の場合をテストしようと思いましたが、コンストラクタでテキストボックスを満たしているので、必ず満ちていて、空のテストを実行できません。

autotestとdebugがあるとして。

autotest debug ->fill
autotest !debug ->empty
!autotest debug ->fill
!autotest !debug ->empty(本番)
ということになります。

この
autotest !debug ->empty
を実現するには、どうすればいいでしょう?

発生している問題・エラーメッセージ

いまはMSTestで自動テストする前に、TestFillTextBoxes();を手動でコメントアウトしています。
コメントアウトを忘れるとテストに不合格になります。
手動でコメントアウトは、自動テストになじまないので、なにか方法があれば教えてください。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

FillTextBox を適用したものとしてないものをテストするよりも、テストプロジェクトで TextBox.Text の値を設定した場合としていない場合の二種類のテストメソッドを用意すればいいだけではありませんか?
つまり FillTextBox 自体を削除するということです。

シンボルを定義しなおすには該当アセンブリをコンパイルしなければなりませんが、DEBUG を定義した場合としていない場合の二種類のテストを常に行う必要があるとは思えません。
開発中は Debug モードでテストし、リリース前に Release モードで一度テストすれば十分でしょう。

投稿2018/03/16 07:22

Zuishin

総合スコア28656

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

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

0

こんにちは。

どこのコンストラクタで呼んでいるのでしょうか。
テストコードのクラスですか?

であれば、各テストケースごとに異なるテストデータの準備はコンストラクタではないタイミングで行うべきかなと思いますが如何でしたでしょうか。

投稿2018/03/16 01:44

編集2018/03/16 01:45
Tak1wa

総合スコア4791

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

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

meshkit

2018/03/16 01:50

コメントありがとうございます。コンストラクタはテストコードのではなく、実際のコードのコンストラクタです。
Tak1wa

2018/03/16 01:56

なるほど。 autotestとdebugがあるとして。 autotest debug ->fill autotest !debug ->empty !autotest debug ->fill !autotest !debug ->empty(本番) 上記がちょっとわからなかったのですが、これは条件付きコンパイル AUTOTEST と DEBUG があるということですか? コンパイル変数の変更はどのプロジェクトでどのように行われていますでしょうか。
meshkit

2018/03/16 02:29

上記は単に条件のマトリクスです。 autotesutはMSTestの実行(すべて実行、デバッグ実行)、debugはVisualStudioでのデバッグです。 MSTestではすべて実行しても、Visual Studio的にはDebugでの実行になるようです。 autotest !debug ->empty に相当する条件を設定して、MSTestで実行したいです。
meshkit

2018/03/16 02:53

コンパイル変数とはTestFillTextBoxes()のことでしょうか? それなら実際のコードのコンストラクタで、手動で//してます。
Tak1wa

2018/03/16 02:59

コンパイル変数ってちょっと呼び方が適当で、しかも古かったかもしれません、すみません。 Conditional("DEBUG")は以下のようにプロジェクトのプロパティで設定するシンボルで動作が切り替わると思います。そのあたりの設定変えたら期待どおり動きませんか?という趣旨でした。 http://smdn.jp/programming/netfx/conditional/ ※デフォルトではDEBUGモードでビルドするとDEBUGシンボルが有効になってた気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問