有关 Azure CI/CD 集成测试的建议 [已关闭]

问题描述 投票:0回答:1

使用 .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 管道访问本地数据库??

任何建议或者您是否可以为我指出正确的方向,请。感谢您的任何反馈

c# unit-testing azure-devops moq .net-6.0
1个回答
0
投票

我的问题是,我们将在 azure ci/cd 上部署这个应用程序,因此我们可以使用上述技术来执行单元测试,但是集成测试呢?

Moq(以及任何其他动态模拟库)可以帮助您用Test Doubles替换真正的依赖项。

您还可以编写

这样做的自动化测试,而是使用实际的依赖项;例如数据库之类的。这些是不同的测试,所以如果您也想这样做,您也可以编写这些测试。

是否可以使用 Moq 进行集成测试来测试数据库?

不。测试替身显然不是数据库 - 它是数据库的特定于测试的

替换

也是云开发的新手。当我们进入 CI/CD 管道时,集成测试如何处理数据库中的测试数据?因为我们无法从 CI/CD 管道访问本地数据库??

您需要弄清楚如何设置 CI/CD 管道可以访问的数据库环境。我建议将其自动化。

© www.soinside.com 2019 - 2024. All rights reserved.