使用 HttpCalloutMock 调用测试时会发生什么?
What happens when you call a test using HttpCalloutMock?
这不是 code/case 具体问题。
我是 Apex 的新手,我正在尝试测试对外部 API 执行标注的方法。我知道为了测试这个方法,我必须创建一个 class 来实现 HttpCalloutMock 并在我的测试中使用它。
但是,我想知道:在测试中,当我调用我正在测试的实际方法时,调用是否会传到幕后的 API?还是我放入模拟中的数据是唯一传递的数据?
(我问是因为,如果是后者,那不就意味着这些测试会适得其反并且没有必要吗?)
您在模拟 class 中提供的虚拟数据将被尽职尽责地 returned。是的,这很烦人,双重工作。
但是还有什么办法呢?真正调用外部 API 可能会产生不良后果(将“我的真棒测试订单!!!1one!11”发送到生产执行系统将是一场灾难,特别是如果你这样做几次因为部署一直失败)。当这样的 API 出现故障时,您真的、真的需要将某些东西部署到生产环境中——您不应该成为第三方服务器的人质,甚至不应该测试一个。
与其抱怨,不如试着拥抱它。是的,这是垃圾。但这是您测试代码如何处理不同输出的机会。当 API 响应是“HTTP 500 内部服务器错误”、HTML 而不是 JSON 或者甚至没有响应,只是超时时它如何反应。做的越扎实,你就会越自信
真的有那么难吗?捕获一些真实的消息和错误,删除敏感数据,执行一些 switch 语句“if account number = 123 return this else return that”然后你就完成了。
是的,它本质上意味着自己实现第 3 方的逻辑。但是好吧,对于测试驱动的开发,您最好还是从他们服务的虚拟表示开始,这与您拥有的 API“合同”足够接近。作为奖励 - 当某些东西突然坏掉时,你可以对他们大喊大叫,你可以证明这不是你的改变。
最后,这与与另一位 SF 开发人员分工并没有太大区别。 “好的,我做 UI 位,你做顶点位,这是我们承诺使用的数据接口,1 周后见”。你能相信这个人到什么程度,嗯? ;)
这不是 code/case 具体问题。
我是 Apex 的新手,我正在尝试测试对外部 API 执行标注的方法。我知道为了测试这个方法,我必须创建一个 class 来实现 HttpCalloutMock 并在我的测试中使用它。
但是,我想知道:在测试中,当我调用我正在测试的实际方法时,调用是否会传到幕后的 API?还是我放入模拟中的数据是唯一传递的数据?
(我问是因为,如果是后者,那不就意味着这些测试会适得其反并且没有必要吗?)
您在模拟 class 中提供的虚拟数据将被尽职尽责地 returned。是的,这很烦人,双重工作。
但是还有什么办法呢?真正调用外部 API 可能会产生不良后果(将“我的真棒测试订单!!!1one!11”发送到生产执行系统将是一场灾难,特别是如果你这样做几次因为部署一直失败)。当这样的 API 出现故障时,您真的、真的需要将某些东西部署到生产环境中——您不应该成为第三方服务器的人质,甚至不应该测试一个。
与其抱怨,不如试着拥抱它。是的,这是垃圾。但这是您测试代码如何处理不同输出的机会。当 API 响应是“HTTP 500 内部服务器错误”、HTML 而不是 JSON 或者甚至没有响应,只是超时时它如何反应。做的越扎实,你就会越自信
真的有那么难吗?捕获一些真实的消息和错误,删除敏感数据,执行一些 switch 语句“if account number = 123 return this else return that”然后你就完成了。
是的,它本质上意味着自己实现第 3 方的逻辑。但是好吧,对于测试驱动的开发,您最好还是从他们服务的虚拟表示开始,这与您拥有的 API“合同”足够接近。作为奖励 - 当某些东西突然坏掉时,你可以对他们大喊大叫,你可以证明这不是你的改变。
最后,这与与另一位 SF 开发人员分工并没有太大区别。 “好的,我做 UI 位,你做顶点位,这是我们承诺使用的数据接口,1 周后见”。你能相信这个人到什么程度,嗯? ;)