在 Xamarin 中使用 Moq 进行 NUnit 单元测试
NUnit unit Testing with Moq in Xamarin
我在我的 Xamarin 应用程序中使用两个接口进行日志记录 (NLog)
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
谁能指导我解决我的问题。?在为提到的接口创建存根时似乎有些问题。
请帮忙
日志管理器 mock 从未为其 GetLog
成员配置 return 任何内容。因此在调用时它将 return null。
[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);
}
您必须设置预期在测试时调用的成员的行为,否则它们将默认为默认的 return 类型,在本例中为 null。
我在我的 Xamarin 应用程序中使用两个接口进行日志记录 (NLog)
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
谁能指导我解决我的问题。?在为提到的接口创建存根时似乎有些问题。
请帮忙
日志管理器 mock 从未为其 GetLog
成员配置 return 任何内容。因此在调用时它将 return null。
[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);
}
您必须设置预期在测试时调用的成员的行为,否则它们将默认为默认的 return 类型,在本例中为 null。