none
VisualStudio C# 単体テストロジックの生成 RRS feed

  • 質問

  • VisualStudio 2013 Ultimateを使っています。

    「Unit Test Generator」で単体テストを自動化できることがわかりました。

    一度、単体テストを作ってしまえば、何回でも繰り返すことができるので、繰り返しテストの効率化、省力化は図れるのですが、

    最初にUnitTestGeneratorが作成した単体テストの"枠"に、

    該当メソッドをcallするというテストロジックを記述しなければいけないため、この部分に大きな工数が必要になります。

    古いバージョンのVisualStudioでは、ある程度のパラメータを想定(intの最小など)し、

    該当するメソッドを呼び出すコードを自動的に記述していたと思われるのですが、今はなくなっています。

    この部分をサポートしてくれる拡張機能・アドインなどはないのでしょうか?

    パラメータと期待される結果の組み合わせをExcelファイルなどから読み取ってテストしてくれると理想的です。

    情報、アドバイスがありましたら、よろしくお願いします。

    2014年10月9日 9:56

回答

  • こんにちは。

    VS2012以降は、ユニットテストの自動生成機能が削除されてしまったので、残念ですね。
    何らかのデータから自動テストを行う方法としては「Data driven unittest」という方法があります。これはまだサポートされていると思います。

    方法: データ ドリブン単体テストを作成する

    ただ、データを用意するなどのお膳立ては自分で行う必要があります。

    VS2012からユニットテストの自動生成機能が省かれた理由が明らかになっているかどうかは分かりませんが、ユニットテストの文化がTDDから来ていると考えると、自動的に生成する事が良いとも言えないから、ではないかと推測しています。

    # TDDはテストの記述とコーディングを小さなサイクルで繰り返す事によって開発を行う手法なので、後からテストを書くという方法は馴染まない

    PexやCodeDiggerを使うためには、それがどのようにテストを自動生成するのかと言う事を、ある程度知っている必要があるので、これはこれで万能と言う訳でもありません。また、メソッド単位のひな形の生成が、何をテストするのか(メソッドをテストしているのか、仕様をテストしているのかという、テストの目的)という観点からも、ピントがぼけている事もあると思います。

    私の場合は、ひな形が作られた後、結局大部分をごっそり削って、自分で書き直していたりしました。現在では指摘の通り、殆ど有って無いようなコードが生成されるので、これで良いかなとも思っています。

    • 回答としてマーク Hiranosh 2015年1月22日 7:00
    2015年1月18日 12:53

すべての返信

  • PEXプロジェクトでは「Code Digger」以降の機能は「stay tuned」になっていますね。

    http://blogs.msdn.com/b/nikolait/archive/2013/04/23/introducing-code-digger-an-extension-for-vs2012.aspx

    早く結果が出ることを期待します。

    2014年10月24日 6:00
  • VisualStudio 2015 preview に「Smart Unit Test」が追加されていました。

    ソースコードを分析して、コードカバレッジを最大にする単体テストロジックを生成してくれるようです。

    さっそく評価してみたいと思います。期待通りなら、うれしい。

    VisualStudio2015の正式リリース予定はいつごろになるのでしょうか?

    2015年1月14日 2:58
  • VisualStudio2015の正式リリース予定はいつごろになるのでしょうか?

    まだ公表されていないかと思います。(ご存知かもしれませんが、ここで開発チームのメンバーから返事をもらえるわけではないです)
    個人的には Windows 10 よりは先に出るんじゃないかなぁと予想はしますが、何ともです。
    (Windows 10 のスケジュールを見て、この辺かなーと予想しながら待つ感じでしょうか)

    ※これはあくまで1個人の予想であり、何らかの情報を入手しているわけではありません。

    2015年1月14日 13:18
    モデレータ
  • こんにちは。

    VS2012以降は、ユニットテストの自動生成機能が削除されてしまったので、残念ですね。
    何らかのデータから自動テストを行う方法としては「Data driven unittest」という方法があります。これはまだサポートされていると思います。

    方法: データ ドリブン単体テストを作成する

    ただ、データを用意するなどのお膳立ては自分で行う必要があります。

    VS2012からユニットテストの自動生成機能が省かれた理由が明らかになっているかどうかは分かりませんが、ユニットテストの文化がTDDから来ていると考えると、自動的に生成する事が良いとも言えないから、ではないかと推測しています。

    # TDDはテストの記述とコーディングを小さなサイクルで繰り返す事によって開発を行う手法なので、後からテストを書くという方法は馴染まない

    PexやCodeDiggerを使うためには、それがどのようにテストを自動生成するのかと言う事を、ある程度知っている必要があるので、これはこれで万能と言う訳でもありません。また、メソッド単位のひな形の生成が、何をテストするのか(メソッドをテストしているのか、仕様をテストしているのかという、テストの目的)という観点からも、ピントがぼけている事もあると思います。

    私の場合は、ひな形が作られた後、結局大部分をごっそり削って、自分で書き直していたりしました。現在では指摘の通り、殆ど有って無いようなコードが生成されるので、これで良いかなとも思っています。

    • 回答としてマーク Hiranosh 2015年1月22日 7:00
    2015年1月18日 12:53
  • ありがとうございます。

    「データドリブン単体テスト」について調べてみようと思います。

    自動生成される単体テストについては、確かに注意が必要ですね。

    ・間違ったソースコードからは間違った単体テストが生成される。

    ・単体テストの目的が、「プログラムが仕様書通りにできているか?」を確認することだとしたら、十分ではない。

    ・コード書いて、自動生成された単体テストが通ったら、開発終了!とするプログラマが出てくるかも・・

    自動生成された単体テストは、「カバレッジ向上が目的」と割り切る必要があると感じています。

    channel9でも、賛否両論ですね。

    http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/215

    「こんな機能いれちゃいかん!」と言っている人もいるんですね。

    ツールだから、使う人次第。ツールでできることと人間がやらなければならないことがあるっていうのに賛成です。

    • 編集済み Hiranosh 2015年1月22日 6:38
    2015年1月22日 6:27