Net Core ILogger Value не может быть нулевым

2

Я получаю Значение Logger не может быть нулевым. Я пытаюсь решить это, может быть, что-то с внедрением зависимости. Ошибка получена при юнит-тесте и везде в программе. Правильно ли я выполняю внедрение зависимостей?

Expected: <System.ArgumentException>
But was:  <System.ArgumentNullException: Value cannot be null.
  Parameter name: logger
  at Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger logger,
                     LogLevel logLevel, EventId eventId, Exception exception,
                     String message, Object[] args)   

Мой код выглядит следующим образом:

using System;
using ElectronicsStore.Models;
using Microsoft.Extensions.Logging;

namespace ElectronicsStore.Service
{
    public class ParseVendorSupply
    {
        private readonly ILogger _logger;

        public ParseVendorSupply(ILogger logger)
        {
            _logger = logger;
        }

        public VendorSupply FromCsv(string csvLine)
        {
            VendorSupply vendorsupply = new VendorSupply();

            try
            {
                string[] values = csvLine.Split(',');
                if (values.Length > 3)
                {
                    throw new System.ArgumentException("Too much data");
                }

                vendorsupply.VendorId = Convert.ToInt16(values[0]);
                vendorsupply.ProductId = Convert.ToInt16(values[1]);
                vendorsupply.Quantity = Convert.ToInt16(values[2]);
            }
            catch (Exception)
            {
                _logger.LogInformation("An exception was thrown attempting");
            }
            return vendorsupply;
        }       
    }
}

public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
    Configuration = configuration;
    _logger = logger;
 }

public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton(new LoggerFactory().AddConsole().AddDebug());
     services.AddLogging();

Тест NUnit:

public class ParseVendorSupplyNunit
{

    ILogger logger;

    //conducting this gives me an error, since cannot create instance of abstract class, not sure what alternative is
    //ILogger logger = new ILogger();

    [Test]
    public void FromCsv_ParseCorrectly_Extradata()
    {
        string csvLineTest = "5,8,3,9,5";
        ParseVendorSupply parseVendorSupplytest = new ParseVendorSupply(logger);
        //VendorSupply vendorsupply = parseVendorSupplytest.FromCsv(csvLineTest);
        Assert.That(() => parseVendorSupplytest.FromCsv(csvLineTest), Throws.ArgumentException);
    }
  • 0
    Вы инициализировали свой экземпляр logger нигде в классе модульного тестирования.
  • 0
    Вам нужно инициализировать ваш экземпляр logger где-нибудь в классе модульного теста
Показать ещё 1 комментарий
Теги:
asp.net-core
logging
nunit

1 ответ

2
Лучший ответ

Вы должны инициализировать переменную logger с помощью реализации ILogger такой как ConsoleLogger или чего-то подобного. Я бы порекомендовал подделать регистратор, потому что вы находитесь в UnitTest и, вероятно, не хотите делать тестирование самостоятельно. Так что используйте FakeItEasy или какой-нибудь другой Mocking-Libary и создайте поддельный экземпляр поверх A.Fake<ILogger>()

https://fakeiteasy.github.io/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню