如何对webapi控制器的void方法进行单元测试



我在控制器中有一个void方法,它将数据插入本地数据库。我该如何对该方法进行集成测试。

到目前为止,我已经尝试过了,不知道该在断言中添加什么。

[TestMethod]
public void ProcessTransactions()
{
// Arrange
_transactionController = new TransactionController(_transactionService, _mService);
// Act
_transactionController.ProcessTransactions;
// Assert
}

您有几个选项,这取决于您想要测试什么以及测试深度。

  1. 如果你想检查你的控制器交互与它的依赖关系,你可以使用mock(例如mock你的_transactionService(并断言在mock上调用了什么方法,使用什么参数等。不过,我个人不推荐这种类型的测试。它们使代码具有很强的抗重构性。它并不是真正测试你的应用程序做什么,而是你的应用如何做,这对我来说没有什么意义
  2. 您可以在类的实际实现上运行测试(没有mock(。然后,在测试方法执行之后,您应该集中精力验证系统状态(例如,数据库中的内容(。这种测试对我来说效果更好,但它们需要你先用一些种子数据建立一个数据库,这在大型系统中可能会很麻烦。由于数据库通信,尤其是需要事先安排数据库状态,这些测试运行缓慢
  3. 你也可以跳过控制器的测试,或者做得很粗略,专注于测试你的域逻辑。进行一些简单的测试来验证控制器是否工作仍然很好

这个问题没有确切的答案。这一切都"取决于",但我希望我能阐明一些可能性。

最新更新