2

Visual Studio を使用しているローカル マシンではテストが成功しているが、CI ビルドが TFS サーバーでテストを実行すると失敗するという問題が発生しています。

失敗している行と、コンテキストの前の行を次に示します。

var mockEventRepository = Substitute.For<IEventRepository>();
mockEventRepository.GetAll().ReturnsForAnyArgs(r => new List<Event>().AsQueryable());

ARGUMENT MATCHERSがないことに注意してください。テスト全体で1つもありません。

TFS は次のエラーを返します。

NSubstitute.Exceptions.UnexpectedArgumentMatcherException : 引数マッチャー (Arg.Is、Arg.Any) は、メンバー引数の代わりにのみ使用する必要があります。Returns() ステートメントや、メンバー呼び出し以外の場所では使用しないでください。

一言で言えば、エラーは発生しているときは一貫しているように見えますが (同じエラー)、ランダムに発生するか発生しないようにも見えます。

たとえば...元のビルドが失敗した後、後続の同一のビルドをキューに入れた後、成功しました。ただし、その時は、異なるが類似した誤ったエラーで異なる構成で同じビルドを試みたときに失敗しました:

NSubstitute.Exceptions.AmbiguousArgumentsException : 使用する引数の指定を決定できません。

参考までに、TFS 2015 と VS 2015 を使用しています。

4

2 に答える 2

2

一言で言えば、問題全体は、NSubstitute を使用せずに誤って Arg マッチャーが含まれていた古いテストによって引き起こされました。

ここで学んだ教訓は、このタイプのシナリオでは非常に不正確なエラーが発生する可能性があるということです。このような問題が発生した場合は、Arg マッチャーのすべての使用を確認することをお勧めします。

于 2015-11-14T00:58:30.413 に答える
1

デフォルトでテストクラスを並行して実行するxunitでNSubstituteを使用すると、この問題が発生しました。並列化をオフにすると修正されたため、NSubstitute にはスレッド化の問題があるはずです。テスト プロジェクト AssemblyInfo.cs に追加します。

[assembly: CollectionBehavior(DisableTestParallelization = true)]

https://stackoverflow.com/a/34876963/1128742

于 2017-07-07T14:58:18.703 に答える