我正在我的 asp.net 核心项目中对 Controller 进行单元测试。在一节中,有这样的代码实例化一个类的对象并调用它的方法。
public class ControllerNameController: ControllerBase{
private IDependency _dependency;
public ControllerNameController(IDependency dependency){
_dependency = dependency
}
[HttpGet, Route("Get")]
public ActionResult<dynamic> Get()
{
......
string someString = "abcd";
ClassOne classOneObject = new ClassOne(_dependency);
classOneObject.ClassOneMethod(someString);
..........
return .....
}
}
我无法模拟此功能。我怎样才能做到这一点?
最佳答案
您将不得不更改代码。单元测试的主要优点之一不是保护您免受错误影响,而是帮助您编写更好的代码。ErrorLogHelper
要么是服务,要么是水平方面。
Moq 设计用于模拟接口(interface)或虚拟方法。为此,您需要以某种方式将此依赖项注入(inject)目标对象。
在这种情况下,您需要使其成为服务依赖项,让它实现一个接口(interface)并通过属性或构造函数注入(inject)。
内联初始化意味着代码必须与单元测试一起运行,因为它是代码流的一个组成部分。
private IHostingEnvironment _hostingEnvironment;
public IErrorLogHelper logHelper
public ControllerNameController(IHostingEnvironment hostingEnvironment, IErrorLogHelper logHelper){
_hostingEnvironment = hostingEnvironment;
this.logHelper = logHelper;
}
在你的收获中
catch (Exception ex)
{
string controllerInfo = controller.ActionDescriptor.DisplayName;
logHelper.ErrorLogToFile(controllerInfo, ex);
}
关于c# - 使用 moq 和 nunit 在 Action 结果 C# 中模拟类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60145199/