5

.resx ファイルを使用して、アプリを複数の言語に国際化します。自動化された単体テストは独自のアセンブリにあり、次のように CI (Jenkins) 内のコマンド ラインからそのプロジェクトで mstest を実行します。

mstest.exe /testcontainer:unittests.dll /category:"!TemporaryExclude" /resultsfile:UnitTests.trx

英語以外のサポートされているカルチャのいずれかに設定されたマシンで実行すると、特定の単体テストが失敗するケースが見つかりました。CI で、現在の en-us を含む各カルチャに対して単体テストを実行したいと考えています。これは他の人が遭遇した問題に違いありませんが、私は何も見つけていません。

特定のカルチャに対して mstest を実行する方法はありますか? mstest.exe のコマンド ライン ドキュメントに何も表示されませんでした

テストで Thread.CurrentThread.CurrentCulture と Thread.CurrentThread.CurrentUICulture を指定できることはわかっていますが、チームの開発者がテストの複製をカルチャごとに 1 つずつコピー アンド ペーストする必要はありません。彼らにとって余分な作業であり、文化だけが異なる複製を持つことは、維持が難しく、エラーが発生しやすくなります.

TestMethodAttribute からクラスを派生させ、すべての言語リソース DLL を循環させて、それぞれに 1 回ずつテスト コードを実行することについて疑問に思いましたが、Visual Studio は次のように教えてくれました。

エラー 2 'ClassToExtendTestMethodAttribute': シール型 'Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute' から派生できません

TestClassAttribute についても同様です。

4

1 に答える 1

3

TestInitialize1つのアイデアは、で使用するためにメソッドの構成ファイルからカルチャを読み取り、Thread.CurrentThread.CurrentCultureこのメソッドを基本単体テストクラス(他のすべてのテストクラスから派生する必要がある)に配置することです。これでうまくいく場合はmstest、ループ内のバッチファイルから呼び出して、すべてのステップの後に構成ファイルを変更できます(たとえば、「en-us」から「fr-FR」に)。

または、これは私が使用したことのない「ユニットテスト拡張性サンプル」へのポインタですが、役立つ可能性があります。

于 2012-06-22T16:45:08.370 に答える