Web API控制器的无效测试方法

时间:2018-11-15 21:06:32

标签: c# unit-testing asp.net-web-api controller integration-testing

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

到目前为止,我已经尝试过了,但是不知道在assert中要添加什么。

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

        // Act
        _transactionController.ProcessTransactions;

        // Assert
    }

2 个答案:

答案 0 :(得分:0)

您是否可以更改返回布尔值的方法?

public bool TryProcessTransactions() 
{
     bool wasGreatSuccess = false;

     // do work

     return wasGreatSuccess; 
}

否则,我想您可以从数据库中检索应该插入的内容和Assert.IsEqual()

答案 1 :(得分:0)

您有几种选择,具体取决于您要测试的内容和测试的深度。

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

这个问题没有明确的答案。一切都是“取决于”的,但是我希望我对可能性有所了解。