NSubstitute ReceivedCallsException ошибка при выполнении вызовов в последовательности - PullRequest
0 голосов
/ 15 января 2019

Когда я запускаю тесты ниже в следующей последовательности ((т. Е. Test1, а затем Test2), он выдает указанную ошибку. Но он работает нормально, если выполняется противоположная последовательность (т. Е. Test2, а затем Test1)

[Факт]

public async Task Test1()
{
    var body = GenerateStreamFromString();
    var rawMessage = new BrokeredMessage(body);

    ProductContractIngestFunc.GetProductContractDataHandler = log => Task.FromResult(_dataHandler);

    await ProductContractIngestFunc.Ingest(rawMessage, _logger);

    await _feedbackService.DidNotReceiveWithAnyArgs().ReportIssueAsync(
        Arg.Any<BrokeredMessage>(),
        Arg.Any<DataSyncValidationException>());
}

[Fact]
public async Task Test2()
{
    var body = GenerateStreamFromString();
    var rawMessage = new BrokeredMessage(body);

    var mockFeatureFlagService = Substitute.For<IFeatureFlagService>();
    var featureFlag = new FeatureFlag { Enabled = false };

    mockFeatureFlagService.GetFeatureFlagAsync(ApplicationConstant.SyncDataType.ProductContract)
        .Returns(Task.FromResult(featureFlag));

    ServiceInjector.GetFeedbackService = log => _feedbackService;
    ServiceInjector.GetFeatureFlagService = log => mockFeatureFlagService;

    await ProductContractIngestFunc.Ingest(rawMessage, _logger);

    await _feedbackService.ReceivedWithAnyArgs().ReportIssueAsync(
        Arg.Any<BrokeredMessage>(),
        Arg.Any<FeatureFlagException>());

}

Ниже ошибка возникает в _feedbackService.ReceivedWithAnyArgs()

Ошибка:

at NSubstitute.Core.ReceivedCallsExceptionThrower.Throw(ICallSpecification callSpecification, IEnumerable`1 matchingCalls, IEnumerable`1 nonMatchingCalls, Quantity requiredQuantity)
   at NSubstitute.Routing.Handlers.CheckReceivedCallsHandler.Handle(ICall call)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at NSubstitute.Routing.Route.Handle(ICall call)
   at NSubstitute.Proxies.CastleDynamicProxy.CastleForwardingInterceptor.Intercept(IInvocation invocation)
   at Castle.DynamicProxy.AbstractInvocation.Proceed()

Изначально я думал, что это из-за совместного использования одного и того же объекта, а затем пытался сбросить фиктивные объекты в каждом тесте, но все равно без разницы.

...