我正在嘗試使用 Python UnitTest 迭代一組 Mock 物件。
當我運行測驗時,我收到錯誤:
Error while generating images - 'Mock' object is not iterable
這是我要測驗的功能:
def generate_images(models, latent_dim=120, n_samples=20):
latent_points = generate_latent_points(latent_dim, n_samples)
batch_size = n_samples / len(models)
images = []
try:
for i in range(len(models)):
start = int(i * batch_size)
end = int((i * batch_size) batch_size - 1)
gen_imgs = models[i].predict(latent_points[start:end])
images = [*images, *gen_imgs]
image_matplot = encode_images(np.asarray(images))
return image_matplot
except Exception as e:
print("Error while generating images - ", e)
這是我的測驗功能:
def test_image_generation(self):
# Given
model = Mock()
models = [model, model]
# When
result = generate_images(models, 120, 10)
# Then
model.predict.assert_called()
self.assertIsNotNone(result)
self.assertIs(type(result), io.BytesIO)
我進行了除錯,似乎代碼在 for 回圈中運行并呼叫了“預測”函式,但在該回圈中傳遞的次數不超過一次,并且例外以“Mock 物件不可迭代”的形式出現。
我不明白這個錯誤,因為當我除錯并檢查“模型”陣列的型別時,我得到了“串列”。
uj5u.com熱心網友回復:
問題出在這里
gen_imgs = models[i].predict(latent_points[start:end])
images = [*images, *gen_imgs]
gen_imgs 又是一個 Mock 并且你正試圖解壓它。但是,它是不可迭代的,因此您無法解壓縮它。您將明確地模擬 predict 函式以回傳一個可迭代的。就像是
m = Mock()
m.predict = Mock(return_value=[1,2,3])
但可能具有符合您需求的不同 return_value 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430879.html
標籤:Python 单元测试 python-unittest
上一篇:對.plPerl檔案進行單元測驗
下一篇:為沒有回傳值的函式撰寫單元測驗
