Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API单元测试(测试端点与测试一切)_Api_Unit Testing_Laravel 4 - Fatal编程技术网

API单元测试(测试端点与测试一切)

API单元测试(测试端点与测试一切),api,unit-testing,laravel-4,Api,Unit Testing,Laravel 4,我们正在使用Laravel构建API,我们面临一个基本问题: 我们是否应该测试所有东西(每个模型、控制器和任何其他类中的每个方法)?或者只测试API端点,因为测试端点意味着其他所有内容都将被测试,因为API端点使用的是控制器的方法,而控制器的方法反过来又使用模型的方法 事实上,我倾向于后面的测试,即测试端点将帮助您测试所有其他内容,但我需要确保这是正确的做法 编辑: 考虑以下两点: 测试端点意味着我必须发送一个HTTP请求并等待响应,以确定它是否是我所需要的,这对于这种方法来说可能是非常糟糕的

我们正在使用Laravel构建API,我们面临一个基本问题:

我们是否应该测试所有东西(每个模型、控制器和任何其他类中的每个方法)?或者只测试API端点,因为测试端点意味着其他所有内容都将被测试,因为API端点使用的是控制器的方法,而控制器的方法反过来又使用模型的方法

事实上,我倾向于后面的测试,即测试端点将帮助您测试所有其他内容,但我需要确保这是正确的做法

编辑:

考虑以下两点:

  • 测试端点意味着我必须发送一个HTTP请求并等待响应,以确定它是否是我所需要的,这对于这种方法来说可能是非常糟糕的
  • 测试所有内容意味着我必须找到一些方法来模拟laravel请求及其头,这对于这种方法来说可能是非常糟糕的

任何提示或评论都将不胜感激。

双方都存在争议和支持者。我怀疑在这个问题上有很多的观点,就像有开发人员在做任何形式的开发人员测试一样

简言之:

  • 单元测试会给您的设计带来更大的压力。如果您在单元级别进行测试,那么糟糕的代码将受到更大的伤害
  • 单元测试允许您更准确地指出问题,因为它们单独测试每个工作单元。如果单元测试失败,您知道在哪里查找问题。如果集成测试失败,您知道有问题,但通常必须开始调试以找到实际问题
我喜欢twitter用户最近使用的短语:

当它们为绿色时,所有测试看起来都一样。当他们红了你 看看真正的区别


另一方面,集成测试在重构时提供了更多的自由度。如果仅在API级别进行测试,则可以在不影响测试的情况下更改整个实现。如果您在单元级别进行测试,重构可能意味着您必须更新/重写大量测试。

那么您认为构建这两个测试更好吗?如果是,如果模型依赖于请求头,那么应该如何在laravel中测试模型?例如,这完全取决于您当前的环境:项目、同事开发人员的纪律/成熟度等。如果您现在问我,我肯定会在单元级测试所有东西,并且很少进行端到端测试来验证系统是否正确连接。这与科恩的概念很好地联系在一起。事实上,您的测试级别越高,维护成本就越高。谢谢@prgmtc,您也让我看到了其他东西,这可能是因为单元不满足单一责任原则,所以我无法编写单元测试,我将接受您的回答:D