簡體   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