我如何使用 NSubstitute 在构造函数上模拟 ILogger
How do I use NSubstitute to mock ILogger on a constructor
我有以下具体的控制器构造函数:
public class AuthenticationController : ControllerBase
{
private readonly IUserRepository<User> _userRepository;
private readonly ILogger<AuthenticationController> _logger;
private readonly IConfiguration _config;
public AuthenticationController(IUserRepository<User> userRepository, ILogger<AuthenticationController> logger, IConfiguration config)
{
_userRepository = userRepository;
_logger = logger;
_config = config;
}
我正在尝试模拟构造函数,但似乎在使用 ILogger 时遇到了问题。
var userRepository = Substitute.For<IUserRepository<User>>();
var config = Substitute.For<IConfiguration>();
var logger = Substitute.For<ILogger>();
var controller = new AuthenticationController(userRepository, logger, config);
使用记录器我尝试了以下方法,但都继续在构造函数下留下一个 'red line' :例如。在线
var controller = new AuthenticationController(userRepository, logger, config);
无论我尝试什么,AuthenticationController 都有红线。
如果我在表单中声明记录器:
var logger = Substitute.For<ILogger<AuthenticationController>>();
= 的整个右边也是红线。
var logger = Substitute.For<ILogger<AuthenticationController>>();
那我试过了:
var auth = Substitute.For<AuthenticationController>();
var logger = Substitute.For<ILogger<auth>>();
当我将鼠标悬停在红线上时,它提到 api 上的程序集引用高于单元测试程序集。这两个项目都针对 .Net Core 2.1
这是我的测试项目产生的错误:
Assembly 'My.Api' with identity 'My.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.AspNetCore.Mvc.Core, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' which has a higher version than referenced assembly 'Microsoft.AspNetCore.Mvc.Core' with identity 'Microsoft.AspNetCore.Mvc.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
我的测试项目引用了我的 api 项目。 api 项目引用了 Microsoft.AspNetCore.App (2.1.1)
我的单元测试项目根本没有直接引用这个库。
您需要确保您的代码项目和单元测试项目使用相同版本的包含 ILogger 的 nuget 包。
奇怪,我在解决方案中新建了一个测试项目,还是报同样的错误。因此,在我最初的测试项目中,我通过 Nuget 专门安装了
Microsoft.AspNetCore.Mvc.Core (2.1.1) package
我的错误消失了,运行 成功了。我没有在我的 Api 项目中具体引用它。我把它放在一起以防其他人 运行 遇到类似的问题。
我有以下具体的控制器构造函数:
public class AuthenticationController : ControllerBase
{
private readonly IUserRepository<User> _userRepository;
private readonly ILogger<AuthenticationController> _logger;
private readonly IConfiguration _config;
public AuthenticationController(IUserRepository<User> userRepository, ILogger<AuthenticationController> logger, IConfiguration config)
{
_userRepository = userRepository;
_logger = logger;
_config = config;
}
我正在尝试模拟构造函数,但似乎在使用 ILogger 时遇到了问题。
var userRepository = Substitute.For<IUserRepository<User>>();
var config = Substitute.For<IConfiguration>();
var logger = Substitute.For<ILogger>();
var controller = new AuthenticationController(userRepository, logger, config);
使用记录器我尝试了以下方法,但都继续在构造函数下留下一个 'red line' :例如。在线
var controller = new AuthenticationController(userRepository, logger, config);
无论我尝试什么,AuthenticationController 都有红线。
如果我在表单中声明记录器:
var logger = Substitute.For<ILogger<AuthenticationController>>();
= 的整个右边也是红线。
var logger = Substitute.For<ILogger<AuthenticationController>>();
那我试过了:
var auth = Substitute.For<AuthenticationController>();
var logger = Substitute.For<ILogger<auth>>();
当我将鼠标悬停在红线上时,它提到 api 上的程序集引用高于单元测试程序集。这两个项目都针对 .Net Core 2.1
这是我的测试项目产生的错误:
Assembly 'My.Api' with identity 'My.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.AspNetCore.Mvc.Core, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' which has a higher version than referenced assembly 'Microsoft.AspNetCore.Mvc.Core' with identity 'Microsoft.AspNetCore.Mvc.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
我的测试项目引用了我的 api 项目。 api 项目引用了 Microsoft.AspNetCore.App (2.1.1)
我的单元测试项目根本没有直接引用这个库。
您需要确保您的代码项目和单元测试项目使用相同版本的包含 ILogger 的 nuget 包。
奇怪,我在解决方案中新建了一个测试项目,还是报同样的错误。因此,在我最初的测试项目中,我通过 Nuget 专门安装了
Microsoft.AspNetCore.Mvc.Core (2.1.1) package
我的错误消失了,运行 成功了。我没有在我的 Api 项目中具体引用它。我把它放在一起以防其他人 运行 遇到类似的问题。