9

私の質問は以前に尋ねられたことと非常に関連していますが、実際的なアドバイスが必要です。

私は「レガシーコードを効果的に扱う」を手にしており、取り組んでいるプロジェクトで読んだ本からのアドバイスを使用しています。このプロジェクトは、いくつかのライブラリで構成される C++ アプリケーションですが、コードの大部分は単一の実行可能ファイルにコンパイルされます。何かに触れる必要があるときに、既存のコードに単体テストを追加するために googletest を使用しています。

私の問題は、「テスト中」のアプリケーションからライブラリにコードを抽出できないときにコードを共有する必要がある2つの異なる実行可能ファイルがあるため、ユニットテストをビルドできるようにビルドプロセスをセットアップする方法です。現在、メイン アプリケーションのビルド プロセスから生成されたオブジェクト ファイルに対する単体テスト リンクを保持するアプリケーションのビルド プロセスを作成しましたが、それは本当に嫌いです。何か提案はありますか?

4

5 に答える 5

2

古いコードのテストを開始する方法については、 「レガシー コードを効果的に使用する」が最適なリソースです。事態を悪化させない短期的な解決策は実際にはありません。

于 2008-10-21T20:54:52.423 に答える
2

使用できるメイクファイル構造をスケッチします。

all: tests executables

run-tests: tests
    <commands to run the test suite>

executables: <file list>
    <commands to build the files>

tests: unit-test1 unit-test2 etc

unit-test1: ,files that are required for your unit-test1>
    <commands to build unit-test1>

私のプロジェクトの唯一の開発者として、それは大まかに私がしていることです

于 2008-10-21T21:36:17.410 に答える
1

テスト アプリがテストに必要なオブジェクト ファイルのみをリンクしている場合、実質的に既にそれらをライブラリとして扱っていることになり、これらのオブジェクト ファイルをメイン アプリとテスト アプリ用の個別のライブラリにグループ化できるはずです。それができないなら、あなたがやっていることはあまりにも悪い代替手段だとは思いません。

テスト対象ではない他のオブジェクト ファイルをリンクする必要がある場合は、依存関係を壊す必要があることを示しており、そのための完璧な本があります。同様の問題があり、Vlion が提案したようなシステムを使用しています

于 2008-10-22T06:49:41.473 に答える
0

個人的には、あなたが行っているように継続するか、ターゲット アプリケーションと単体テストを同時に作成するビルド スクリプトを用意することを検討します (同じコードベースから 2 つのバイナリが生成されます)。はい、魚臭いですが、非常に実用的です。

あなたに敬意を表し、テストを頑張ってください。

于 2008-10-21T20:56:54.430 に答える
0

私は、テストごとに 1 つのテスト実行可能ファイルを好みます。これにより、リンク時の継ぎ目が有効になり、コードの残りの部分を気にせずに 1 つのユニットで作業できるため、TDD が可能になります。

ライブラリをすべてのテストに依存させます。これは、コードが実際に変更されたときにのみテストが実行されることを意味します。

失敗した場合、テストは適切な場所でビルド プロセスを中断します。

于 2008-10-21T21:33:34.357 に答える