代码之家  ›  专栏  ›  技术社区  ›  Gamma

将mock对象传递给控制器构造函数时传递的方式

  •  0
  • Gamma  · 技术社区  · 4 年前

    在我的应用程序中,Bill控制器类是这样的。在这里 Logger 参数引用自 Serilog.Core;

    using Microsoft.Extensions.Configuration;
    using Serilog.Core;
    using System;
    using System.Threading.Tasks;
    
    namespace core.admin.biller.Controllers {
      [ApiController]
      [Produces("application/json")]
      public class BillController: Controller {
          
        readonly IBillRepository BillRepository;
        APILog APILog;
        
        public BillController(IBillRepository _BillRepository, Logger logger, IConfiguration configuration) {
          BillRepository = _BillRepository;
          APILog = new(logger, configuration);
        }
      }
    }
    

    我给上面的类写了一些单元测试,内容是这样的。

    public class BillUnitTest
    {
        public Mock<IBillRepository> mock = new();
        public Mock<IConfiguration> mockConfig = new();
        public Mock<Logger> mockLog = new();
    
        [Fact]
        public void GetBill_NullObjectPassed_ReturnsBadRequestResult()
        {
            //Arrange
            BillController BillController = new(mock.Object,mockLog.Object,mockConfig.Object);
            RetriveSavedBillerReqModel req = null;
    
            // Act
            var result = BillController.GetSavedBillers(req);
    
            // Assert
            Assert.IsType<BadRequestObjectResult>(result);
        }
    }
    

    现在我在这里得到以下错误。

    错误消息: 系统NotSupportedException:要模拟的类型(Logger)必须是接口、委托或非密封的非静态类。 堆栈跟踪: Moq。警卫C:\projects\moq4\src\Moq\Guard.cs:line 120中的IsMockable(类型类型)

    如何解决此错误?

    0 回复  |  直到 4 年前