NUnit модульное тестирование с Moq в Xamarin - PullRequest
0 голосов
/ 09 января 2019

Я использую два интерфейса для регистрации (NLog) в моем приложении Xamarin

ILoggingService

public interface ILoggingService
{
    void Info(string message);
    void Info(string format, params object[] args);

    void Error(string message);
    void Error(string format, params object[] args);
    void Error(Exception e, string message);
    void Error(Exception e, string format, params object[] args);

    void Fatal(string message);
    void Fatal(string format, params object[] args);
    void Fatal(Exception e, string message);
    void Fatal(Exception e, string format, params object[] args);

    void Debug(string message);
    void Debug(string format, params object[] args);

    void Trace(string message);
    void Trace(string format, params object[] args);

    void Warn(string message);
    void Warn(string format, params object[] args);
}

И еще один интерфейс

ILogManager

public interface ILogManager
{
      ILoggingService GetLog([System.Runtime.CompilerServices.CallerFilePath]string callerFilePath = "");
}

В моем тестовом проекте я создал файл установки следующим образом.

[SetUpFixture]
public class Setup
{
    public static readonly Mock<IDependencyService> MockedService = new Mock<IDependencyService>(MockBehavior.Strict);
    readonly Mock<ILogManager> _logManager = new Mock<ILogManager>(MockBehavior.Strict);
    readonly Mock<ILoggingService> _loggingService = new Mock<ILoggingService>(MockBehavior.Strict);

    [OneTimeSetUp]
    public void OneTimeSetUp()
    {
        MockedService.Setup(p => p.Get<ILogManager>()).Returns(_logManager.Object);
        MockedService.Setup(p => p.Get<ILoggingService>()).Returns(_logManager.Object.GetLog());
    }

    [OneTimeTearDown]
    public void OneTimeTearDown()
    {

    }
}

Я думаю, что допустил ошибку во время насмешки над интерфейсом. Из-за этого я получаю GetLog () всегда нулевым.

logger = _serviceLocator.Get<ILogManager>().GetLog(); // Always return null

Кто-нибудь может мне помочь решить мою проблему? Похоже на проблему с созданием заглушки для упомянутого интерфейса.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 09 января 2019

Макет менеджера журналов никогда не был настроен для возврата чего-либо для его члена GetLog. Следовательно, при вызове он вернет ноль.

[OneTimeSetUp]
public void OneTimeSetUp() {

    _logManager.Setup(_ => _.GetLog(It.IsAny<string>())).Returns(_loggingService.Object);

    MockedService.Setup(p => p.Get<ILogManager>()).Returns(_logManager.Object);
    MockedService.Setup(p => p.Get<ILoggingService>()).Returns(_loggingService.Object);
}

Вы должны настроить поведение членов, которые, как ожидается, будут вызываться при тестировании, в противном случае они по умолчанию будут использовать возвращаемый тип по умолчанию, который в этом случае будет нулевым.

...