none
Visual Studio 2005 Team Suite 評価版でのコードカバレッジ RRS feed

  • 質問

  • 皆様はじめまして。ふくよしと申します。

    現在Visual Studio 2005の購入を検討すべく、Visual Studio 2005 Team Suite 評価版をまず購入し、色々と検討を行っています。

    しかし、肝心なコードカバレッジが使用出来ないです。

    元々評価版では使用出来ないのでしょうか?

    色々試してはいるのですが、ローカルのテストの実行(localtestrun.testrunconfig)で対象となるdllやexeをチェックして実行しようとすると、「リモートコンピュータで実行している、またはコードカバレッジが有効になっているテストのデバッグはサポートされていません」と表示され、カバレッジが取得出来ません。

    テスト結果も「結果を作成出来ません」というメッセージが多々現れ、かなり困った状況です。

    自分一人ではどうしようもなく、皆様のお力を借りたい次第です。

    ご教示宜しくお願いします。

     

    2006年3月20日 10:06

すべての返信

  • もうちょっと情報が欲しいです。

    少なくとも製品版であってもコードカバレッジはデバッグモードは取得できませんし、テストプロジェクトの実行時にしか取得してくれません。

     

    2006年3月20日 10:31
  • 中博俊様

    返信ありがとうございます。

    手順としては下記の通りです。

    ①テストしたいソースはdllの為(仮にプロジェクトA)、それを呼び出す為のプロジェクトを用意(仮にプロジェクトB)

    プロジェクトBに対して「単体テストの作成」を選択→単体テスト用のプロジェクトが生成される(仮にプロジェクトC)

    プロジェクトCに対して表題の設定を行った所上手くいかず

    という手順を踏みました。

    中博俊様の仰っていた実行モードですが、デバッグモードで実行を行っていました。リリースにして明日試そうと思います(すいません。今手元に環境がありません)

    他に何か手順に誤りがあればご指摘頂けると幸いです。

    以上、宜しくお願いします。

    2006年3月20日 16:33
  • デバッグモード/リリースモードではなくって、デバッガのアタッチの有無ですね。

    なので、普通にテストを行うだけで通常は問題ないはずです。

    testrunconfigにプロジェクトA, Bをチェックしていますよね?

    2006年3月20日 23:40
  • 中博俊様

    返信ありがとうございます。

    >デバッガのアタッチの有無

    勉強不足な為、どの部分の操作か分かりませんでした。

    「デバッグ」メニューの「プロセスにアタッチ」の事でしょうか?

    >testrunconfigにプロジェクトA, Bをチェックしていますよね?

    チェック済みです。本当にもう訳が分からなくなってきたので、下記の様なプログラムを作りました。(プロジェクト名は「Test1」です。コンソールアプリケーションです)

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Test1
    {
      class Program
      {
        static int Main(string[] args)
        {
          int ii = 1;

          for (int aa = 0; aa < 10; aa++)
          {
            if (ii == 1)
            {
              ii = 99;
            }
          }
          return 0;
        }
      }
    }

    そして、「テスト」メニューから「新しいテスト」を選択してTest1のテスト項目全てチェックした状態で作成したテストプロジェクトが下記のソースです。(プロジェクト名TestProject5)

    // 次のコードは Microsoft Visual Studio 2005 によって生成されました。
    // テストの所有者は、各テストの正当性を確認しなければなりません。
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System;
    using System.Text;
    using System.Collections.Generic;
    namespace TestProject5
    {
      /// <summary>
      ///Test1.Program のテスト クラスです。すべての
      ///Test1.Program 単体テストをここに含めます
      ///</summary>
      [TestClass()]
      public class ProgramTest
      {


        private TestContext testContextInstance;

        /// <summary>
        ///現在のテストの実行についての情報および機能を
        ///提供するテスト コンテキストを取得または設定します。
        ///</summary>
        public TestContext TestContext
        {
          get
          {
            return testContextInstance;
          }
          set
          {
            testContextInstance = value;
          }
        }
        #region 追加のテスト属性
        //
        //テストを作成するときに、次の追加属性を使用することができます:
        //
        //クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
        //
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
        //
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //各テストを実行する前にコードを実行するには、TestInitialize を使用
        //
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //各テストを実行した後にコードを実行するには、TestCleanup を使用
        //
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Main (string[]) のテスト
        ///</summary>
        [DeploymentItem("Test1.exe")]
        [TestMethod()]
        public void MainTest()
        {
          string[] args = null; // TODO: 適切な値に初期化してください

          int expected = 0;
          int actual;

          actual = TestProject5.Test1_ProgramAccessor.Main(args);

          Assert.AreEqual(expected, actual, "Test1.Program.Main は予期する値を返しませんでした。");
          Assert.Inconclusive("このテストメソッドの正確性を確認します。");
        }

      }
    }

    TestProject5から実行すると、「コードカバレッジ不可」、「結果を作成できません」となってしまいます。

    何故出来ないのかが理解できずずっと悩んでいます。長文になり大変申し訳ありません。ご教示宜しくお願いします。

    2006年3月21日 8:40
  • テストを実行しましたっていうのはどういう手順でしょうか。

    うちで再現させた方法は

    1.テストビューウィンドウで、今回作成されたテストメソッドを選択
    2.テストビューウィンドウの左上の"選択範囲の実行"を行う
    3.テストが正常終了する(Assert.Inconclusive行が残っている限りは成功しません。)
    4.テスト結果ウィンドウ上で右クリックしてコード カバレッジの結果を選択
    5.コード カバレッジの結果ウィンドウでカバーされていることを確認
    6.Mainをダブルクリックして結果をエディタ上で確認

    こんな感じです。

    2006年3月21日 14:45
  • 中博俊様

    返信ありがとうございます。

    「テストを実行」とは、F5キー押下です。これが原因だったと思います。

    (どうしてもVS6からの名残でデバッグ=F5という癖が染み付いていました)

    きちんとご指摘の通り操作しましたら、正しくカバレッジが取得出来ました。

    ホントにありがとうございます。

    また、恥を承知でお聞きしたいことがあります。

    >少なくとも製品版であってもコードカバレッジはデバッグモードは取得できませんし、テス>トプロジェクトの実行時にしか取得してくれません。

    とうお話でしたが、デバッガを使用してのカバレッジ取得は不可能と考えて宜しいでしょうか?

    ブレークポイントで変数を書き換えながらデバッグを進め、最終的にカバレッジ取得出来ればと考えているのですが・・・。

    コードカバレッジではサポート外と考えて宜しいのでしょうか?

    ご教示宜しくお願いします。

    2006年3月22日 0:47
  • 無理ですね。

    デバッガがアタッチされていると取得できないのはそういうメッセージもあえて出る以上仕様だと考えています。

    それよりデバッガで値を変えてちゃテストにならんとです。(^^;

    いっぱいのテストを作って埋めていくしかないでしょうね。(^^

    2006年3月22日 5:35