public async Task GetTest(Currency currency)
        {
            var rate = _fixture.Build <ExchangeRate>().With(x => x.Currency, currency).Create();

            var repo = new Mock <IExchangeRepository>();

            repo.Setup(r => r.GetLatest(currency)).Returns(Task.FromResult(rate));
            var controller = new ExchangeRateController(repo.Object);

            var result = await controller.Get(currency.ToString()).ConfigureAwait(false);

            Assert.Equal(Mapper.Map <ExchangeRateDto>(rate), result.Value, new ObjectComparer <ExchangeRateDto>());
        }
예제 #2
0
        public void ExchangeRateControllerTest()
        {
            var projectRoot = Path.GetDirectoryName(Assembly.GetExecutingAssembly()
                                                    .Location.Replace("XUnitTests\\bin\\Debug\\netcoreapp2.2", "TestSolution"));
            var mockEnvironment = new Mock <IHostingEnvironment>();

            mockEnvironment.SetupGet(m => m.ContentRootPath).Returns(projectRoot);

            var rateService    = new ExchangeRateService(mockEnvironment.Object);
            var rateController = new ExchangeRateController(rateService);

            var testRate = File.ReadAllText($"{projectRoot}\\{rateService.RateFileName}");

            var         okResultsCount  = 0;
            var         badResultsCount = 0;
            var         maxTasks        = 100;
            List <Task> tasks           = new List <Task>();

            for (var i = 0; i < maxTasks; i++)
            {
                tasks.Add(Task.Run(async() =>
                {
                    var response = await rateController.Get();
                    var result   = response.Result;

                    if (result is OkObjectResult okResult)
                    {
                        Assert.NotNull(okResult.Value);
                        Assert.Equal(testRate, okResult.Value);
                        Assert.InRange(rateService.CurrentNumberOfThreads, 0, 9);
                        Interlocked.Increment(ref okResultsCount);
                    }

                    if (result is BadRequestObjectResult badResult)
                    {
                        Assert.NotNull(badResult.Value);
                        Assert.Equal(rateService.OverThreadExceptionMessage, badResult.Value);
                        Assert.Equal(10, rateService.CurrentNumberOfThreads);
                        Interlocked.Increment(ref badResultsCount);
                    }
                }));
            }
            Task.WaitAll(tasks.ToArray());

            Assert.Equal(10, okResultsCount);
            Assert.Equal(maxTasks - 10, badResultsCount);
        }