c# - 使用 moq 和 nunit 在 Action 结果 C# 中模拟类的方法

标签 c# asp.net-core nunit moq

我正在我的 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/

相关文章:

c# - 如何使用复杂对象发出 GET 请求?

c# - .NET Core 和 IIS 间歇性 403 访问被拒绝

c# - 如何使用 XAML 和 C# 根据其当前位置选择垂直 ListView 项目?

asp.net-core - 为什么这违反了类型参数 'TUser' 的约束?

c# - Windows 运行时中的 DependencyProperty,XAML 值显示为空

NUnit-console 2.5.4 不能运行多个程序集?

NUnit 与 Microsoft 测试管理器集成

c# - 在异步委托(delegate)中断言异常

c# - 是否有可能有一个 Func 的参数数组

c# - 在 C# 中使用 StringBuilder 构造 HTML 的问题