我试图使用一些pyscard属性在一个小函数中模拟一个响应。
我的职能:
def card_reader():
# request any card type
cardtype = AnyCardType()
cardrequest = CardRequest(timeout=25, cardType=cardtype)
cardservice = cardrequest.waitforcard()
# attach the console tracer
observer = ConsoleCardConnectionObserver()
cardservice.connection.addObserver(observer)
# connect to the card and perform a few transmits
cardservice.connection.connect()
try:
response, sw1, sw2 = cardservice.connection.transmit(ADPU)
except SWException as e:
print(str(e))
cardservice.connection.disconnect()我的模拟:
@patch("my_module.temp_card_reader.CardRequest")
def test_card_reader(mock_card_request):
mock_card_request.return_value.connection.transmit.return_value = (200, 201, 203)
result = card_reader()使用我的测试,我可以模拟直到cardservice.connection.connect(),但我不能继续返回我想要的值。
发布于 2022-10-24 21:56:10
我一直对莫克斯,MagicMocks和我对他们缺乏了解感兴趣,这就是为什么我对此感到好奇。
我可能完全错了,但我认为正在发生的情况如下:
这个被嘲弄的类是CardRequest.
cardservice = cardrequest.waitforcard()
.waitforcard(),MagicMock()表示“噢.好的……我想我将在这里返回一个空白的(默认的?) MagicMock”(意思是:当您试图在MagicMock上调用一个未指定的方法时,cardservice是一个默认的MagicMock,它将继续返回MagicMocks.)。
我认为(我已经测试过了,但我不是超级自信,因为我缺少了实际的代码),解决方案是告诉CardRequest模拟的东西,大意是:“嘿,当他们调用.waitforcard()__时,不要返回一个空的(默认的?) MagicMock,而是返回知道如何处理.transmit方法的 mock_cardservice模拟”。
因此,模仿cardservice是可行的:
@patch("my_module.temp_card_reader.CardRequest")
def test_card_reader(mock_card_request):
mock_cardservice = MagicMock()
mock_cardservice.connection.transmit.return_value = (200, 201, 203)
mock_card_request.return_value.waitforcard.return_value = mock_cardservice
result = card_reader()有了这个,我就可以看到200 201 203,如果我在cardservice.connection.transmit(ADPU)之后做一个打印
response, sw1, sw2 = cardservice.connection.transmit(ADPU)
print(response, sw1, sw2)https://stackoverflow.com/questions/74186760
复制相似问题