繁体   English   中英

如何在 python 单元测试 aws-assume-role-lib 和 boto3 库中进行模拟?

[英]How to mock in python unit tests aws-assume-role-lib and boto3 libraries?

我有一个 function,其中包含以下代码

ses = boto3.Session()
as_role = aws_assume_role_lib.assume_role(session, "some_role")

我正在尝试对其进行单元测试,我需要模拟这两个调用。 最好的方法是什么?

没有更多信息,就无法回答您的问题。 任何直接的答案都需要更多的信息。 你想测试什么? 它当然不可能是您向我们展示的代码,因为如果您模拟出这两个调用,就没有什么可测试的了。

Mocking 涉及为特定测试用例注入替身,这样对于这些测试用例,模拟返回预定值而不调用实际例程。 那么您希望这些值是什么? 模拟也可能有副作用,或者根据外部 state 改变它们的行为,但你想尽量避免这些情况。 模拟通常是功能性的......为每组特定的显式输入返回特定的 output,并且既不修改也不受到隐式(外部)state 的影响。

我假设ses应该是session以便将第一次调用的结果传递给第二次调用。 在这种情况下,这些调用都不会使用不同的数据,因此您可以通过将 static 值分配给as_role来模拟这两个调用的结果......无论您以后的代码想要看到什么值。 由于只有一组输入,因此应该只有一个可能的 output。

如果您需要模拟基于外部 state 更改其行为,那将更加复杂。 在这种情况下如何模拟完全取决于可能的外部状态,它们来自哪里,以及它们如何影响as_role的值。 同样,如果您需要您的模拟来导致外部 state 发生变化,例如修改全局变量,您需要指定它,这可能会影响您选择模拟的方式。

简而言之,您应该定义一个规范来描述您希望您的模拟如何在一组受限的特定条件下运行。 拥有该规范将使您开始决定如何实施它们。

如果您只是问如何通常在flexmock Mocker mox mock https://garybernhardt.github.io/python-mock-comparison/ 要求图书馆推荐是违反 SO 政策的,因为它主要涉及个人意见,所以如果您要求这样做,您应该寻找其他地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM