私たちのチームはAzureDevOpsパイプラインを実装しようとしていますが、いくつかの問題があります。背景として、セルフホストのWindowsサーバーでテストを実行しています。すべての作業でフロントエンドテストを実行しましたが、バックエンドを合格させるのに問題があります。
テストの大部分は問題なく合格していますが、期待どおりに機能しない場合がいくつかあります。それらは並行して実行できるはずですが、それが問題ではないことを確認するためにオフにしました。また、目立った変更を加えずに、それらを単独で実行してみました。
私たちが得るエラーは、以下のような単純なアサートの失敗であり、多くの情報を提供しません。
Error Message:
Assert.AreEqual failed. Expected:<True>. Actual:<False>.
しかし、行番号は、私が理解していない以下のようなモックセットアップを指しています。
mockQueryHandler.Setup(x => x.Handle(It.IsAny<FindQuery>())).Returns(info);
現在、最も問題を引き起こしているテストクラスは、イベントアラート機能をテストするクラスです。最初のテストは合格するようですが、後続のテストは失敗します。ただし、失敗したテストをあきらめるまで3回再実行するパイプライン設定があります。したがって、再実行するたびに、次のテストに合格します。私が考えることができる唯一のことは、私たちのオートモックが何らかの理由で私たちに問題を与えているということです。AutoMockに従ってセットアップしました-キー付き登録でユニットテストする方法は?
次のようにモックアウトします。
var IAbstractEventFactoryMock = new Mock<IAbstractEventFactory>();
using (var mock = AutoMock.GetLoose(builder => builder.RegisterInstance(IAbstractEventFactoryMock.Object).Keyed<IAbstractEventFactory>("EventLogFactory").Keyed<IAbstractEventFactory>("ArpEventLogFactory"))) {
...
}
以下は.runsettingsファイルです
<RunSettings>
<RunConfiguration>
<ResultsDirectory>.\TestResults</ResultsDirectory>
</RunConfiguration>
<MSTest>
</MSTest>
</RunSettings>
以下は、テストの実行に使用しているYAMLです
steps:
- task: VSTest@2
displayName: 'Run All Tests'
inputs:
testAssemblyVer2: |
**\*ID_Test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)/ID_Test'
runSettingsFile: 'ID_Test/.runsettings'
runInParallel: false
runTestsInIsolation: true
codeCoverageEnabled: false
testRunTitle: 'Unit Tests'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
continueOnError: true
繰り返しますが、これらのテストはすべてローカルで問題なく合格し、パイプラインで十分な回数実行すると最終的に合格します。したがって、問題はコード自体にあるとは思いません。テストが適切にセットアップまたはクリーンアップされていないようです。私は主に、この問題を修正するためにyamlまたはrunsettingsを構成できる他の方法に関するアイデアを探しています。よろしくお願いします。追加情報を提供できるかどうかお知らせください。
これは私たちのテストの問題であることが判明しました。いくつかの場所では、ローカルで問題のない現在の時刻を使用しましたが、サーバーの実行時間がはるかに長く、いくつかのエラーが発生しました。ローカルでテストを実行するのと同様の実行時間を持つエージェントでパイプラインをテストすると、パイプラインに問題がないことがわかりました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加