파이썬에 익숙하지 않지만 C#과 자바 스크립트에서 단위 테스트를 많이 해왔다. 파이썬에서 조롱하는 프레임 워크를 알아내는 데 어려움을 겪고 있습니다. 여기에 내가 (아래 손질) 한 내용은 다음과 같습니다파이썬 유닛 테스트에서 모의이 안되다
invoice_business.py
import ims.repository.invoice_repository as invoiceRepository
import logging
logger = logging.getLogger(__name__)
def update_invoice_statuses(invoices):
for invoice in invoices:
dbInvoice = invoiceRepository.get(invoice.invoice_id)
print("dbInvoice is %s" % dbInvoice) #prints <MagicMock etc.>
if dbInvoice is None:
logger.error("Unable to update status for invoice %d" % invoice.invoice_id)
continue;
test_invoice_business.py
from unittest import TestCase, mock
import logging
import ims.business.invoice_business as business
class UpdateInvoiceTests(TestCase):
@mock.patch("ims.business.invoice_business.invoiceRepository")
@mock.patch("ims.business.invoice_business.logger")
def test_invoiceDoesNotExist_logsErrorAndContinues(self, invoiceRepoMock, loggerMock):
#Arrange
invoice = Invoice(123)
invoice.set_status(InvoiceStatus.Filed, None)
invoiceRepoMock.get.return_value(33)
#Act
business.update_invoice_statuses([invoice])
#Assert
invoiceRepoMock.get.assert_called_once_with(123)
loggerMock.error.assert_called_once_with("Unable to update status for invoice 123")
시험은
AssertionError: Expected 'get' to be called once. Called 0 times.
실패 내가 잘못 여기서 뭘하는지
dbInvoice is <MagicMock name='invoiceRepository.get()' id='xxxx'>
어떤 생각의 결과를 볼 수 있기 때문에 update_invoice_statuses
에서문은, 그러나, 당한다?
편집는 @의 chepner의 도움 후, 나는 또 다른 주장의 오류로 실행하고 나는 .return_value(None)
고맙다. 나는 내가 그 사실을 알아 차렸을 것이라고 생각하지 않는다. – mdickin