繁体   English   中英

如何使用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);

使用记录器,我尝试了以下操作,但是所有操作都继续在构造函数下留下“红线”: 在线上

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

这是从我的测试项目中生成的错误:

标识为'My.Api,版本= 1.0.0.0,文化=中性,PublicKeyToken =空的程序集'My.Api'使用'Microsoft.AspNetCore.Mvc.Core,版本= 2.1.1.0,文化=中性,PublicKeyToken = adb9793829ddae60 ”,其版本比引用程序集“ Microsoft.AspNetCore.Mvc.Core”的身份为“ Microsoft.AspNetCore.Mvc.Core,版本= 2.0.0.0,文化=中性,PublicKeyToken = adb9793829ddae60”

我的测试项目引用了我的api项目。 api项目引用了Microsoft.AspNetCore.App (2.1.1)我的单元测试项目根本没有对该库的直接引用。

您需要确保您的代码项目和单元测试项目使用包含ILogger的nuget软件包的相同版本。

奇怪,我在解决方案中创建了一个新的测试项目,但仍然收到相同的错误。 因此,在我最初的测试项目中,我专门通过Nuget安装了

Microsoft.AspNetCore.Mvc.Core(2.1.1)程序包

我的错误消失了,它成功运行了。 在我的Api项目中,我没有特别提到这一点。 如果有人遇到类似问题,我已经提出了这个建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM