Rhino Mocks асинхронное модульное тестирование - PullRequest
0 голосов
/ 16 октября 2018

Среда
Версия Rhino Mocks: 3.6.1
Visual Studio: 2017
Resharper: 2017.3.3
Nunit: 2.6.4

Iзапустить 2 тестовых прибора вместе, используя Resharper.При этом я получаю сообщение об ошибке:

System.InvalidOperationException: предыдущий метод 'IService.DoThing ();'требует возвращаемого значения или исключения, чтобы бросить.в Rhino.Mocks.Impl.RecordMockState.AssertPreviousMethodIsClose () в Rhino.Mocks.Impl.RecordMockState.Replay () в Rhino.Mocks.MockRepository.ReplayCore (Object obj, Boolean checkIcksExxohinohinoR] (T mock, функция 2 action) at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function 2 действие) на MobileServices.Api.Tests.Unit.TestFixture2.d__2.MoveNext () в C: \ SCM \ MyProject.Tests.Unit \ ExampleTests.cs: строка 42 ---Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в NUnit.Framework.Internal.AsyncInvocationRegion.AsyncTaskInvocationRegion.WaitForPendingOperationsToComplenIn..Contribute. invision.rac..TestMethodCommand.RunAsyncTestMethod (контекст TestExecutionContext)

Когда я запускаю два тестовых светильника несколько раз, источник теста для ошибки постоянно изменяется между TestFixture1.Test1 на TestFixture2.Test1.Когда я запускаю тестовые приборы в изоляции, все проходит.Это проблема с Rhino Mocks и многопоточностью?

using Project.Tests.Unit.SupportingClasses;
using NUnit.Framework;
using System.Threading.Tasks;
using Rhino.Mocks;

namespace Project.Tests.Unit
{
    [TestFixture]
    public class TestFixture1
    {
        private IService _service;

        [SetUp]
        public void SetUp()
        {
            _service = MockRepository.GenerateMock<IService>();
        }

        [Test]
        public async Task Test1()
        {
            _service.Stub(s => s.DoThing()).Return(Task.FromResult(true));

            var response = await _service.DoThing();
        }
    }

    [TestFixture]
    public class TestFixture2
    {
        private IService _service;

        [SetUp]
        public void SetUp()
        {
            _service = MockRepository.GenerateMock<IService>();
        }

        [Test]
        public async Task Test1()
        {
            _service.Stub(s => s.DoThing()).Return(Task.FromResult(true));

            var response = await _service.DoThing();
        }
    }
}

namespace Project.Tests.Unit.SupportingClasses
{
    public interface IService
    {
        Task<bool> DoThing();
    }
}

1 Ответ

0 голосов
/ 17 октября 2018

Да.Ваш код доказывает, что Rhino Mocks не является потокобезопасным .Я бы посоветовал вам использовать Moq, поскольку он должен хорошо работать параллельно.

...