[英]How to mock a logger for unit testing in c#?
我需要进行单元测试的方法以下列方式记录 output 并且不返回任何内容。 我如何为以下情况编写单元测试方法? 请帮助我是这个概念的新手,之前没有写过任何测试方法
private void revoke (params) {
if (userexist (revokedb, userid))``
{
deleteusers (revokedb, userid);
if (userexist (revokedb, userid))
{
logger.info ("Not able to delete user");
}
else
{
logger.info ("User was succesfully deleted");
}
else
{
logger.info ("unable of find the user");
}
}
查看起订量moq
://github.com/Moq/moq4
您的记录器需要实现一个接口,然后您可以模拟。
例如
MyLogger:ILogger
ILogger
将定义方法info(string)
在你的测试中,你首先设置你的模拟
var mock = new Mock<ILoveThisLibrary>();
然后您可以将此模拟注入您的 class (其中使用logger
)。 通过构造函数或任何其他方法用这个模拟 object 替换实际记录器。 这称为依赖注入。
现在所有对logger
的调用都将定向到您的模拟 object,您可以执行各种 mocking。 例如期望,即检查使用您期望的字符串调用的info
。
我认为您可以在 class 构造函数中注入记录器,如下所示。
public class BusService : IBusService
{
private readonly ILogger _logger;
public BusService(ILogger<BusService> logger)
{
_logger = logger;
}
private void revoke (params) {
if (userexist (revokedb, userid))``
{
deleteusers (revokedb, userid);
if (userexist (revokedb, userid))
{
_logger.info ("Not able to delete user");
}
else
{
_logger.info ("User was successfully deleted");
}
else
{
_logger.info ("unable of find the user");
}
}
}
一旦像上面那样将它注入到 class 构造函数中,您就可以使用 Moq class 来模拟您的记录器,如下面的测试方法。
[Fact]
public void BusService_revoke_deleteUser()
{
// Arrange
var logger = Mock.Of<ILogger<BusService>>();
var busService = new BusService(logger);
// Act
var result = busService.revoke(params);
// Assert
// Assert statement will go here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.