none
visual studio 単体テスト作成時のコンパイルエラー RRS feed

  • 質問

  • Microsoft Visual Studioのコードカバレッジ機能を使うため、
    単体テストを作成しています。

    あるプロジェクトに対し、テストプロジェクトを作成し、
    単体テストの記述を追記した後、ビルドを実行したところ以下のエラーが出力されました。

    =======
    2>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
    2>UnitTest1.obj : error LNK2028: 未解決のトークン (0A00000D) "*** が関数 "*** で参照されました。
    2>UnitTest1.obj : error LNK2028: 未解決のトークン (0A00000E) "*** が関数 "*** で参照されました。
    2>UnitTest1.obj : error LNK2028: 未解決のトークン (0A00000F) "*** が関数 "*** で参照されました。
    2>UnitTest1.obj : error LNK2019: 未解決の外部シンボル "*** が関数 "*** で参照されました。
    2>UnitTest1.obj : error LNK2019: 未解決の外部シンボル "*** が関数 "*** で参照されました。
    2>UnitTest1.obj : error LNK2019: 未解決の外部シンボル "*** が関数 "*** で参照されました。
    =======

    今回作成したテストプロジェクトがテスト対象のプロジェクトのobjファイルををうまく読み込めていないように見え、
    解決するためにはテストプロジェクトのリンカーがobjファイルを参照できるよう設定を変更する必要があると考えています。

    そこで質問なのですが、

    Q1.テストプロジェクトとテスト対象のプロジェクト間でobjファイルが参照できない原因は何が考えられますでしょうか。
    Q2.リンカーが参照するobjファイルを直接指定する方法はありますでしょうか。
    Q3.そもそも本環境では単体テストを作成し、コードカバレッジを実施することは可能なのでしょうか。


    <環境>
    OSバージョン:Windows 7 Professional
    ソフトバージョン:Microsoft Visual Studio 2010 ultimate
    使用言語:Visual C++
    ※環境はマネージ型・アンマネージ型の混合のため「共通言語ランタイム サポート (/clr)」を設定しております。
     参考URL:http://msdn.microsoft.com/ja-jp/library/ms243171.aspx
     
     

    お手数ですが、分かる方ご回答をいただけないでしょうか。

    2011年7月12日 6:43

すべての返信

  • これって、どういう単体テスト・カバレッジを狙っているのでしょうか?
    Visual Studio の標準機能は、確かマネージコードが対象となるはずなので、アンマネージコードのカバレッジ取得を狙っているのなら、効果を期待できない可能性があるかもしれません。
    (試していません)

    あと、気になったページ:
    http://msdn.microsoft.com/ja-jp/library/ms243171.aspx

    ところで、別プロジェクトで生成した obj ファイルをすでに混ぜ込んでいる、あるいはそれを目指しているのでしょうか?
    正直、うまくいくイメージを持てません。少なくとも、プロジェクトの設定が違うのであれば、それを混ぜてはうまくリンクできなくて当然だと考えます。
    (リンクすべきライブラリも違いますし)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年7月12日 14:27
    モデレータ
  • Azuleanさん
    返信いただきありがとうございます。

    今回は「.exe」形式のテスト用実行ファイルを単体テスト上で実行し、コードカバレッジをとることが目的です。
    その前段階として、以下のURLにあるような方法で単体テストを作成してみたのですが、コンパイルエラーとなってしまいました。
    http://msdn.microsoft.com/ja-jp/library/ms182532.aspx

    >これって、どういう単体テスト・カバレッジを狙っているのでしょうか?
    >Visual Studio の標準機能は、確かマネージコードが対象となるはずなので、アンマネージコードのカバレッジ取得を狙っているのなら、効果を期待できない可能性があるかもしれません。


    以下のURLには
    http://msdn.microsoft.com/ja-jp/library/ms243171.aspx

    「/clrオプションを使用することで、Visual C++ テスト プロジェクトのあらゆる種類 (混合、安全、および純粋) で単体テストを作成できます。」
    とあるので、単体テスト自体は作成可能なようです。
    カバレッジについては後述する方法で取得はできましたが、カバレッジ後にソースコードに表示されるはずの色分けが表示されず困っています。

    >ところで、別プロジェクトで生成した obj ファイルをすでに混ぜ込んでいる、あるいはそれを目指しているのでしょうか?
    >正直、うまくいくイメージを持てません。少なくとも、プロジェクトの設定が違うのであれば、それを混ぜてはうまくリンクできなくて当然だと考えます。
    もともとあったソースコードに対しテストプロジェクトを作成したところ、テスト対象のソースコードが参照できませんでした。
    objファイルを混ぜ込んだりは特に行っておりません。


    現状以下のURLを参考に単体テスト上から実行ファイルを起動し、カバレッジを取ることは成功しました。
    しかしながら、カバレッジ後にソースコードに表示されるはずの色分けが表示されないため、調査中です。

    http://social.msdn.microsoft.com/Forums/ja-JP/vstsja/thread/9340f2a9-aaa7-459a-bc34-a744b7a833c1


    いろいろと勉強不足なためもう少し調べてみようと思います。

    ありがとうございました。

    2011年7月15日 0:44