理由は、SmartDeviceユニットテストの一部が1つのマシンで失敗し、別のマシンではなく失敗する理由
-
28-10-2019 - |
質問
Win Mobile 5と6(Professional)エミュレーターの両方で、開発マシンで正常に実行されるユニットテストがいくつかあります。
ビルドサーバーで実行されているユニットテストの一部は失敗しますが、Win Mobile 6エミュレータでのみ(すべてのテストはWin Mobile 5エミュレータに渡されます)。
失敗するテストには、次のようなエラーがあります。
Test method XXXXXMobile.Test.ManifestTests.TestCrewManifest threw exception: System.MissingMethodException: Could not load type 'XXXXXMobile.Controllers.ManifestController' from assembly 'XXXXXMobile.Controllers, Version=1.0.4049.32739, Culture=neutral, PublicKeyToken=null'..
と
Test method XXXXXMobile.Test.PermissionTests.TestMenuBarPermissions threw exception: System.MissingMethodException: Method not found: op_Implicit System.Object..
テストを設定するコマンドラインは次のとおりです。
C:\hudson\jobs\XXXXX Mobile (WinMobile 6 Emulator Tests)\workspace>e:\VS9\Common
7\IDE\MSTest.exe /runconfig:YYYY\WinMobile6Emulator.testrunConfig /testcontainer
:YYYY\XXXXXMobile.Test\bin\Release\XXXXXMobile.Test.dll
testRunConfigファイルはエクスペットです。デフォルトから変更したのは次のとおりです。-展開を有効にする:チェック済み - ホストタイプ:スマートデバイス - プラットフォーム:Windows Mobile 6 Professional SDK -Device:Windows Mobile 6 Professional Emutor
テスト実行コンテナDLLを含むディレクトリには、上記の最初のエラーで言及されているコントローラーDLLも含まれています。
しばらくの間、これに対して頭を叩いてきたので、なぜ一部のテストのみが失敗し、1つのマシンと1つのエミュレータでのみテストが途方に暮れています。 mstest.exeとvstesthost.exeの両方で診断ログをオンにすることで、これ以上有用なエラーメッセージを取得することができませんでした。
提案が感謝しています。
解決
そして、頻繁に起こるように、答えは質問をした直後に現れます。
この場合、問題は、ビルドサーバー上のエミュレータに.NET 3.5がインストールされていないことでした。 VSからアプリケーションを実行すると、.NET 3.5がインストールされますが、ユニットテストを実行してもそうではありません。開発マシンでは、すでにアプリを実行してから状態を保存していました(実行するたびに.NET 3.5を再インストールする必要があります)。これはビルドサーバーで行われていませんでした。