使用 .Net 6 构建的 API 项目
目前正在为我们的 API 项目编写单元测试。
我刚刚实现了 Moq 框架(第一次)并使用 Setup() 函数来测试异常和记录器消息,例如:
//Setup TestServiceFunction(firstParam) to throw exception when firstParam var is passed in
_testService.Setup(x => x.TestServiceFunction(firstParam)).ThrowsAsync(new Exception("Test"));
//pass in logger and testService to controller
var controller = new testController(_logger.Object, _testService.Object);
//This controller.TestControllerFunction will trigger TestServiceFunction in the _testService, passing in 'firstParam'
var result = await controller.TestControllerFunction(firstParam);
//Which will cause the following code to be hit in the controller:
_logger.LogError("Test Log", "Test Log Message");
return StatusCode(StatusCodes.Status500BadRequest, "Bad Request");;
//Testing Exception
var obj = result as ObjectResult;
Assert.AreEqual(500, obj.StatusCode);
Assert.AreEqual("Test", obj.Value);
//Testing Logging
_logger.Verify(
x => x.Log(
It.Is<LogLevel>(l => l == LogLevel.Error),
It.IsAny<EventId>(),
It.Is<It.IsAnyType>((v, t) => v.ToString() == "Test Log"),
It.IsAny<Exception>(),
It.Is<Func<It.IsAnyType, Exception, string>>((v, t) => true)), Times.Once);
这一切正常,异常和日志记录正确且匹配。
我的问题是,我们将在 azure ci/cd 上部署此应用程序 那么我们可以使用上面的技术来进行单元测试,但是集成测试呢?
是否可以使用 Moq 进行集成测试来测试数据库?
也是云开发的新手。当我们进入 CI/CD 管道时,集成测试如何处理数据库中的测试数据?因为我们无法从 CI/CD 管道访问本地数据库??
任何建议或者您是否可以为我指出正确的方向,请。感谢您的任何反馈
我的问题是,我们将在 azure ci/cd 上部署这个应用程序,因此我们可以使用上述技术来执行单元测试,但是集成测试呢?
Moq(以及任何其他动态模拟库)可以帮助您用Test Doubles替换真正的依赖项。
您还可以编写不这样做的自动化测试,而是使用实际的依赖项;例如数据库之类的。这些是不同的测试,所以如果您也想这样做,您也可以编写这些测试。
是否可以使用 Moq 进行集成测试来测试数据库?不。测试替身显然不是数据库 - 它是数据库的特定于测试的
替换。
也是云开发的新手。当我们进入 CI/CD 管道时,集成测试如何处理数据库中的测试数据?因为我们无法从 CI/CD 管道访问本地数据库??您需要弄清楚如何设置 CI/CD 管道可以访问的数据库环境。我建议将其自动化。