2016-10-01 6 views
-1

Ich schreibe Komponententests für eine Funktion, f, die andere Funktionen/Klassen importiert, mit denen der Komponententest nicht (direkt) interagiert. Gibt es eine Möglichkeit, diese Funktionen aus dem Komponententest zu patchen (vielleicht in set_up())?Unit-Test mit Mock und Patch

Als Referenz verwende ich Python 2.7.

Von der unittest, möchte ich das Verhalten von Helfer ändern/patchen.

In Unittest-Datei:

def test_some_function(): 
    assert(some_function() == True) 

In some_function() Definition

import helper 
def some_function(): 
    foo = helper.do_something() 
    return foo & bar 
+1

Bitte geben Sie ein [mcve] Ihres Szenarios an. Zeigen Sie Ihren Code und Testcode und erklären Sie, welche Probleme Sie haben. – idjaw

+0

Bearbeitet. Hoffentlich ist das genug. Ich glaube nicht, dass es viel mehr Code gibt, den ich einfügen kann, da dies eher eine allgemeine Frage ist. Ich weiß, dass ich Patches usw. in einer einzigen Datei packen kann, aber ich möchte das Verhalten für die Komponententests ändern können. Ich habe versucht, einen set_up() - Patch-Befehl zu verwenden, konnte es aber nicht zum Laufen bringen. – PK5144

+1

Also, Sie wollen kontrollieren, was 'helper.do_etwas 'tut? Mit anderen Worten, Sie versuchen, das zu verspotten, um seine Rückkehr zu kontrollieren, um Ihre Unit-Tests für 'some_function' zu schreiben? Denn das ist definitiv machbar – idjaw

Antwort

1

ein Modul Mocking aus ist ziemlich Standard und dokumentiert here. Sie werden ein ziemlich explizites Beispiel sehen, wie es gemacht wird.

Darüber hinaus ist es wichtig zu verstehen, where to patch, um zu verstehen, wie Sie Module in anderen Skripts ordnungsgemäß ausspionieren.

Um Ihnen ein explizitere Beispiel mit Bezug auf den Code zur Verfügung stellen, wollen Sie so etwas wie dies zu tun:

import unittest 
from unittest.mock import patch 

import module_you_are_testing 

class MyTest(unittest.TestCase): 

    @patch('module_you_are_testing.helper') 
    def test_some_function(self, helper_mock): 
     helper_mock.do_something.return_value = "something" 
     # do more of your testing things here 

Also, das Wichtigste ist, hier zu erinnern, ist, dass Sie helper in Bezug verweisen zu wo Sie testen. Sehen Sie sich den Beispielcode an, den ich bereitgestellt habe, und Sie werden sehen, dass wir module_you_are_testing importieren. Also, es ist in Bezug auf , die Sie verspotten.

Verwandte Themen