none
単体テスト用のアクセッサが生成できない RRS feed

  • 質問

  • Visual Studio 2008 SP1 TeamSystem(評価版)を使って単体テスト機能を試していたところ、単体テスト用のアクセッサ生成に失敗する場合がありました。
    テスト対象のコードは以下の通りです。

        public interface ISample<T>
    {
    T SampleMethod();
    }
    public class Sample<T> : ISample<T>
    {
    //ケース1.↓のように実装を行うとアクセッサは生成できる
    //public T SampleMethod()
    //ケース2.↓のように明示的実装を行うとアクセッサが生成できない
    T ISample<T>.SampleMethod()
    {
    throw new NotImplementedException();
    }
    }

    ジェネリクスのインターフェイスを継承したクラスでインターフェイスの明示的実装を行った場合(ケース2)では
    テストプロジェクトのビルド時に以下のエラーが発生し、ビルドが通りません。
    error : アセンブリ 'UnitTest_Accessor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' からの型 'UnitTest.Sample_Accessor`1' にあるメソッド 'SampleMethod' に実装が含まれていません。

    テスト対象のコードを修正せずにテストプロジェクトが実行できる方法はありますでしょうか?

    2009年5月8日 11:38

すべての返信

  • 明示的な実装は通常のpublicなメソッドとは位置付けが違う(Sample<T>クラスのメソッドとして存在しないのと同じ)だから、
    うまく行かないのかなと予想してみたのですが、当方の環境で試したら、問題なくテストケースの枠は生成されました。

    ちなみに、

    > 単体テスト用のアクセッサ生成

    とおっしゃっているのは、メソッド名を選択して、右クリックで出るメニューから「単体テストの作成」を選んで、
    単体テストの枠を自動生成する作業のことという理解であってますよね?

    環境:Visual Studio 2008 SP1  TeamSystem
    実験手順:新規にWindows Formsプロジェクトを立ち上げ、提示のコードを追加して、
    メソッド名を選択して「単体テストの作成」を実施しました。
    2009年5月8日 16:12
  • 説明不足で申し訳ない

    > 単体テスト用のアクセッサ生成

    というのはコード上で右クリック→「プライベートアクセサの作成」になります。
    単体テストの枠は自動生成できますが、テストプロジェクトに「テストの参照\*.accessor」ファイルが追加されるとビルドが通らなくなります。
    2009年5月9日 2:47
  • 失礼しました。恥ずかしながら、「プライベートアクセサの作成」という機能の存在を今まで知りませんでしたm(_ _)m
    プライベートメンバ向けのテストのためのサポート機能なんですね。

    件の現象を確認しました。問題点が何なのかも理解しました。
    これは非常に困った状況ですね。状況だけを見るとどうみても不具合(※)でしょう。
    ※明示的実装が含まれているクラスを含むプロジェクトに対するテストプロジェクトでは「プライベートアクセサの作成」機能が事実上使えないため

    というわけで、不具合情報を探してみました。Googleで「Create Private Accessor」で検索。
    http://www.dotnetmonster.com/Uwe/Forum.aspx/vs-net-enterprise-tools/1076/Create-Private-Accessor-Build-Error
    http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/f92aae32-be82-4dfb-b4d2-aae9297b7b9a

    2つ目のURLの情報から以下のURLに辿り着きました。
    https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=342139

    要点としては「プライベートアクセサの作成」の実際の処理を行っているPublicize.exeの不具合のようです。
    今後のリリースで修正されるようですが、今のところはどうしようもないみたいですね。 
    2009年5月9日 8:03
  • あれ、紹介して頂いたconnectのサイトをみると、解決済みになってます
    最後のコメントにも「解決しているならFixはどこで手に入るの?」って書いてあるし・・・。
    現状がどうなっているのかよく分かりませんね
    2009年5月10日 1:32