我正在使用两个接口在Xamarin App中进行日志记录(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
有人可以指导我解决我的问题吗?在为上述接口创建存根时似乎有些问题。
请帮助
答案 0 :(得分:3)
日志管理器模拟从未配置为为其GetLog
成员返回任何内容。因此,调用时它将返回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);
}
您必须设置预期在测试时被调用的成员的行为,否则它们将默认为其默认返回类型,在这种情况下将为null。