none
Visual Studio Unit Testの拡張版をVisual Studio2013で動かすには? RRS feed

  • 質問

  • こんにちは、TrailRunner-MFです。いつもお世話になっています。
    今日は少々難しい質問です。

    ----------------
    やろうとしていること
    ----------------
    Visual Studio Unit Testの拡張を行っています。
    で、拡張したUnitTestのアセンブリをVisual Studioで動かしたいと思っています。

    環境:Windows 8.1Pro (64bit版)
    Microsoft Visual Studio Professional 2013
    (Version 12.0.30723.00 Update 3)

    ----------------
    教えていただきたいこと
    ----------------
    作成した拡張テストをVisual Studioから動かすためには、作成したアセンブリの所定のフォルダへのコピーと、レジストリにアセンブリ情報を書き込むことが必要なようです。

    しかし参照したMSのブログの情報がVisual Studio 2010用のものなので2013の場合と違うようです。

    (http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-1.aspx)

    --------------------------------
    ①出来上がった拡張テストクラスのアセンブリをVisual Studioインストール先に以下にコピーすることになっています。
    C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies

    ところがVisual Studio2013の保存先である
      C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE
    の下にはそのようなフォルダはありません。
    何処がPrivateAssembliesの代わりなのでしょうか?

    --------------------------------
    ②以下のレジストリに拡張テスト用アセンブリ情報を書き込むことになっています。
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\EnterpriseTools\QualityTools\TestTypes\{13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b}\TestTypeExtensions

    幸いこちらでは「\VisualStudio\12.0」の下にもほぼ同じノードが繋がっていましたが、最後の「TestTypExtensions」というノードはなく代わりに「Extensions」というノードがあるだけです。
    ここに書きこんでしまってい良いのでしょうか?それとも別途指定された「TestTypeExtensions」ノードを作成してレジストリエントリにアセンブリ情報を書き込むべきなのでしょうか?

    ----------------
    付記事項
    ----------------
    ※)ソリューションの中にテストの拡張クラスを置いておくだけでは、その拡張テストクラスを使用したテストプログラムはVisual Studioのテストエキスプローラから動かすことが出来ません。(テスト実行を指定しても何も動きません。)
    デバッグする意味もあるのでソリューションの中であれば、その拡張テストクラスを使ったクラスは、上記のような登録を行わなくても動いて欲しいものですね。

    --------------------------------
    長くなりましたが、問題となるアセンブリの登録手順を除いては、UnitTestの拡張のやり方はとても単純かつ綺麗に体系化されていると思います。直ぐにでもバンバン使いたいと思っています。どうか情報をお持ちの方、ご提供の方宜しくお願いいたします。



    • 移動 星 睦美 2015年2月4日 0:29 Visual C# から
    2015年2月3日 18:39

回答

  • 全然詳しくありません。すみません。
    あてずっぽうですが、Program Files ではなくて、
    Program Files (x86)の方ではないですかね。
    なぜ、そうなっているのかはさっぱりわかりませんが。

    2015年2月4日 6:08
  • 64bit Windows では 64bit アプリケーション向けの Program Files と、32bit アプリケーション向けの Program Files (x86) があります。
    該当のドキュメントは 32bit Windows の想定で書かれているようですので、64bit Windows では Program Files (x86) と読み替える必要があります。
    (レジストリを Wow6432Node と読み替えているのと同じことです)

    実際、Program Files (x86) 側には PrivateAssemblies フォルダーが存在します。

    // これだけで解決するかわからなかったので昨晩はコメントせず。。。

    2015年2月4日 13:28
    モデレータ

すべての返信

  • 因みに、Visual Studio 2013のインストール先の下にPrivateAssembliesフォルダが出来ていない画像も付けておきます。

    2015年2月4日 5:17
  • 全然詳しくありません。すみません。
    あてずっぽうですが、Program Files ではなくて、
    Program Files (x86)の方ではないですかね。
    なぜ、そうなっているのかはさっぱりわかりませんが。

    2015年2月4日 6:08
  • 64bit Windows では 64bit アプリケーション向けの Program Files と、32bit アプリケーション向けの Program Files (x86) があります。
    該当のドキュメントは 32bit Windows の想定で書かれているようですので、64bit Windows では Program Files (x86) と読み替える必要があります。
    (レジストリを Wow6432Node と読み替えているのと同じことです)

    実際、Program Files (x86) 側には PrivateAssemblies フォルダーが存在します。

    // これだけで解決するかわからなかったので昨晩はコメントせず。。。

    2015年2月4日 13:28
    モデレータ
  • 中澤様、Azulean様、ご回答有り難うございます。

    ご指摘の通り"PrivateAssembly"は"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"の下に見つかりました。

    ここに自分のテストクラスの拡張版アセンブリを置いたところ、取りあえずVisual Studioのテストエキスプローラからテストは実行できるようになりました。ただし今のところこの「この属性(=テストクラス拡張版のAttributeクラスのことです)の単体テスト拡張は登録されていません:・・・」エラーメッセージが出ます。

    これはレジストリの設定方式が間違っていることだと思うので、こちらの方で色々試行錯誤してみます。

    今度はレジストリのあちこちに色々書くのでまずはちゃんとバックアップを取らなければ、です。

    2015年2月5日 4:41
  • その後2日間に渡り、レジストリへの登録方法を色々変えてやってみましたが残念ながらうまく動作しません。

    問題を単純化するためにExtending the Visual Studio Unit Test Type, part 1のブログから取ってきたコードでVisual Studio2010内にプロジェクトを作っり、ビルドしてやってみましたが現象は変わりません。

    ビルドして作成dllを教えていただいたVisual Studio2010用のPrivateAssembliesに入れて以下のレジストリを書き込んでみました。

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\ 
    10.0\EnterpriseTools\QualityTools\TestTypes\ 
    {13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b\TestTypeExtensions 
    \DemoTestClassAttribute] 
    "AttributeProvider"= 
    "DemoExtension.RunAs.RunAsTestClassAttribute, 
            DemoExtension"

    [HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\ 
    10.0_Config\EnterpriseTools\QualityTools\TestTypes\ 
    {13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b\TestTypeExtensions 
    \DemoTestClassAttribute] 
    "AttributeProvider"= 
    "DemoExtension.RunAs.RunAsTestClassAttribute, 
            DemoExtension"

    もっともVisual Studio2010にはテストエキスプローラが無いので、テストメニューより「現在のコンテキストをテスト(またはデバッグ)」を選択して実行します。

    結果エラーとなり一つ前の返信に貼った映像と同じエラーが表示されます。

    同様の問題で悩んでいる人は結構いるみたいでstackoverflowに投稿された同様のトピックを読むと、割りと解決しないままになっている人もたくさんいると思います。

    何方か、解決に向けての何らかの道筋を教えていただけるとありがたいです。(どうも日本の中では、MSのUnitTestをちょこっと拡張するといった少々マニアックなことをする人間は少ないのかもしれません。)

    以上、どうかよろしくお願いいたします。


    2015年2月5日 17:57
  • TrailRunner-MFです。

    ご回答いただいた皆様、参照いただいた皆様、有り難うございました。
    もう少し問題を単純化+具体化したトピックを別途このフォーラム内に立てましたので、このスレッドはここで終了とさせてください。

    色々と有り難うございました。引き続き宜しくお願いいたします。

    2015年2月6日 10:14
  • 新しいスレッドには reg ファイルの中身の記載がないのでこのスレッドで続けさせていただきます。

    1つ疑問を感じるのですが、Wow6432Node の下に書くことは試されていますか?
    前にも書きましたが、ファイルのディレクトリの位置から推察して該当のドキュメント・記載は 32bit Windows を想定した内容だと受け止めるべきです。
    であれば、レジストリも Wow6432Node 以下に書くということを候補に入れた方が良さそうだと考えています。
    WOW64 に対するドキュメントも読むと、理解が深まるかと思います)

    なお、手元は上位エディションとなりますが、以下のキーが存在します。
    このことから、64bit Windows では Wow6432Node に書くことが妥当であり、64bit 向けの論理ビュー(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\... )に書くのは誤りではないかと思った根拠となります。

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\EnterpriseTools\QualityTools\TestTypes\{13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b}\TestTypeExtensions\CodedUITestAttribute

    // 英語フォーラムにも書いていることは参加者に向けて明記しておいた方が良いと思います。
    2015年2月6日 14:19
    モデレータ
  • Azulean様、アドバイス有難うございます。

    ご指摘いただいた通り、HKEY_LOCAL_MACHIN\SOFTWAREの表記につきましては、wOW6432ノードの下に書くのが正しいです。私も自分のPCでテストした際にはそのようにしております。

    最初の投稿のレジストリーの表記は参考にしたサイトからそのままコピーしたものなので誤解を与えてしまっていたようです。大変申し訳ありませんでした。改めてこの部分は以下のようにするのが正しいです。

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\EnterpriseTools\QualityTools\TestTypes\{13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b}\TestTypeExtensions\DemoTestClassAttribute]
    "AttributeProvider"="DemoExtension.RunAs.RunAsTestClassAttribute,DemoExtension"

    [HEKY_CURRENT_USER\SOFTWARE・・・]につきましてはレジストリの階層に「Wow64」に相当するノードがありませんでしたので、このままといたしました。

    尚、そうやってもうまく行かなかったことは付け加えております。

    --------------------------------

    また本件トピックにつきましては、同じ内容の質問を拙い英語でUSサイトの方にも発信しております。

    向うのフォーラムに上げた理由は、USサイトでは質問のカテゴリーがより細分化されており、Visual StudioのUnit Testing Frameworkに特化した問題としてアップされております。

    繰り返しになりますが、MSのUnitTest拡張の手順はとても綺麗に体系化されているので、これが(Visual StudioのProfessionalから)実現できれば本当に素晴らしいことだと思います。もう少し頑張って色々調べ、解決した暁には是非皆様に情報共有したいと思います。

    以上、よろしくお願いいたします。



    2015年2月9日 5:21