Maison  >  Article  >  développement back-end  >  Comment se moquer de la fonction Open avec les instructions With dans les tests unitaires Python ?

Comment se moquer de la fonction Open avec les instructions With dans les tests unitaires Python ?

DDD
DDDoriginal
2024-10-20 16:25:29352parcourir

How to Mock the Open Function with With Statements in Python Unit Tests?

Se moquer des instructions Open with With en Python

Lorsque vous testez du code qui utilise la fonction open() avec une instruction with, il devient nécessaire de moquez-vous de l’appel ouvert pour affirmer le comportement attendu. Voici comment procéder à l'aide du framework Mock en Python :

Python 3

  1. Patch Builtins.open : Patchez les composants intégrés. fonction open en utilisant mock_open à partir du framework mock.
  2. Utiliser Patch comme gestionnaire de contexte : Utilisez patch comme gestionnaire de contexte, qui renvoie l'objet simulé qui remplace l'original.
  3. Call Open : Ouvrez le fichier en utilisant le chemin du fichier.
  4. Assert Content : Affirmez que le contenu lu à partir du fichier est comme prévu.
  5. Assert Mocked Call : Affirme que l'objet simulé a été appelé avec l'argument de chemin de fichier correct.
<code class="python">from unittest.mock import patch, mock_open

with patch("builtins.open", mock_open(read_data="data")):
    mock_file = open("path/to/open")
    assert mock_file.read() == "data"
mock_file.assert_called_with("path/to/open")</code>

Vous pouvez également utiliser patch comme décorateur avec l'argument new_callable défini sur mock_open :

<code class="python">@patch("builtins.open", new_callable=mock_open, read_data="data")
def test_patch(mock_file):
    open("path/to/open")
    assert mock_file.read() == "data"
    mock_file.assert_called_with("path/to/open")</code>

Python 2

  1. Patch __builtin__.open : Patch __builtin__.open au lieu de buildins.open en Python 2.
  2. Importer Mock : Installez mock à l'aide de pip install mock.
  3. Utilisez Patch comme gestionnaire de contexte : Suivez les mêmes étapes qu'en Python 3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn