Mam następujący kod w pliku Pythona. Muszę przetestować ten plik. Ale aby to zrobić, muszę utworzyć instancję obiektu klasy

class BigQuery(metaclass=singleton.Singleton):
    """
    Big Query Class for operations on big query
    Will standardize in future versions.
    """

    def __init__(self):
        """
        Used for initializing client
        """
        try:
            self.client = bigquery.Client.from_service_account_json(
                SERVICE_ACCOUNT_JSON)
        except:
            logging.error("Cannot instantiate bigquery client", exc_info=True)
            raise Exception("Cannot instantiate bigquery client.")

Powyższa klasa zawiera również inne metody, które należy przetestować. Jak mam mockować obiekt dla każdej metody bez wywoływania BigQuery API?

1
bigbounty 31 grudzień 2019, 12:23

1 odpowiedź

Najlepsza odpowiedź

Mam to działające. Zasadniczo musisz mockować wywołanie funkcji do inicjalizacji klienta bigQuery. Z pomocą mock.patch możemy mockować obiekt klienta lub funkcję from_service_account_json. Poniżej znajduje się kod

with patch.object(bigquery.Client, "from_service_account_json") as srv_acc_mock:
            srv_acc_mock.return_value = Mock()

            # do something here....

Musimy również postępować zgodnie z tym samym wzorcem dla klienta GCS, ale zmienić bigquery.Client na storage.Client, importując odpowiednie moduły.

3
bigbounty 1 styczeń 2020, 06:14