Nik*_*nak 5 c# nunit unit-testing serilog asp.net-core
当我运行单元测试时,我收到此错误:\nError Message:\n System.ArgumentNullException : Value cannot be null.\nParameter name: logger并且我收到此警告:\nField \'OrderControllerTest._logger\' is never assigned to, and will always have its default value null
有没有办法让记录器静音或测试它?
\n\n对编程还是新手,渴望学习。已经为此奋斗了很长时间。感谢您的帮助和指导。
\n\n使用堆栈跟踪更新
\n\nStack Trace:\n at Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger logger, LogLevel logLevel, EventId eventId, Exception exception, String message, Object[] args)\n at Microsoft.Extensions.Logging.LoggerExtensions.LogError(ILogger logger, Exception exception, String message, Object[] args)\n at Project.Controllers.OrderController.CustomerOrders(String customerId) in C:\\projects\\Project\\Controllers\\OrderController.cs:line 34\n at Tests.OrderControllerTest.AllOrdersForCustomer() in C:\\projects\\UnitTests\\Project.Service.Tests\\OrderControllerTest.cs:line 74\nRun Code Online (Sandbox Code Playgroud)\n\n到目前为止我所拥有的:
\n\nOrderControllerTest.cs:
\n\nusing System;\nusing System.Collections.Generic;\nusing NUnit.Framework;\nusing Project.Models;\nusing Project.Controllers;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\n\nnamespace Tests\n{\n [TestFixture]\n public class OrderControllerTest\n {\n ILogger<OrderController> _logger;\n\n public OrderControllerTest()\n {\n\n }\n\n [Test]\n public void AllOrdersForCustomer()\n {\n // Arrange\n var controller = new OrderController(_logger);\n var expectedResult = new List<Order>();\n var oneOrder = new Order()\n {\n orderId = 228, \n product= "Jeans",\n status = "Ready for shipping",\n price= 20$\n };\n\n var twoOrder = new Order()\n {\n caseId = 512, \n creditorName = "Basketball",\n status = "Shipped",\n totalOpenBalance = 30$\n };\n expectedResult.Add(oneOrder);\n expectedResult.Add(twoOrder);\n\n // Act\n var actionResult = controller.CustomerOrders("1243");\n var result = (List<Order>)actionResult;\n\n // Assert\n for (var i = 0; i < result.Count; i++)\n { \n CollectionAssert.AreEqual(expectedResult, result);\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n订单控制器.cs:
\n\nusing System;\nusing System.Collections.Generic;\nusing Project.Models;\nusing Project.Repositories;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\n\n\nnamespace Project.Controllers\n{\n public class OrderController : Controller\n {\n ILogger<OrderController> _logger;\n\n public OrderController(ILogger<OrderController> logger)\n {\n _logger = logger;\n }\n\n [HttpGet("customers/{customerId}/orders")]\n public List<Order> CustomerOrders(string customerId)\n {\n try\n {\n return OrderRepository.AllOrders(customerId);\n }\n catch (Exception ex)\n {\n _logger.LogError(ex, "Cant retrieve no orders.");\n return null;\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n ILogger<OrderController> _logger;\n\n public OrderControllerTest()\n {\n _logger = new Mock<ILogger<OrderController>>().Object; \n }\nRun Code Online (Sandbox Code Playgroud)\n\n订单存储库.cs:
\n\n public static List<Order> AllOrders(string customerId)\n {\n var orderlist = new List<Order>();\n\n\n \xc2\xa0 if (Order!=null && Order.Count>0)\n {\n if (Order.TryGetValue(customerId, out orderlist))\n return orderlist;\n }\n return FromDB(customerId);\n\n }\nRun Code Online (Sandbox Code Playgroud)\n
假设您已从 EL MOJO 获取输入,您需要在测试中使用 Moq 初始化 ILogger:
Mock<ILogger<OrderController>> _logger;
public OrderControllerTest()
{
_logger = new Mock<ILogger<OrderController>>();
_logger.Setup(m => m.LogError(It.IsAny<Exception>(), It.IsAny<string>()));
}
Run Code Online (Sandbox Code Playgroud)
现在您应该使用以下内容初始化控制器:
var controller = new OrderController(_logger.Object);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14435 次 |
| 最近记录: |