2016-01-04 9 views
5

Mam trochę kodu, który jest używany w teście jednostkowym. Jednak biblioteka, którą ładuje, wymaga pewnych danych, które nie są rzeczywiście wymagane do testu nosa, ponieważ dane te są wyłudzane przez test jednostkowy. Chciałbym zabezpieczyć odczyty plików w bibliotece, aby nie zostały wywołane w przypadku testu nosa.Jak sprawdzić, czy kod jest uruchamiany z testu nosa?

Czy istnieje prosty sposób na zrobienie tego?

Prawdopodobnie mogę zrobić coś z sys.modules lub początkową linią poleceń, ale wolę coś bardziej eleganckiego, jeśli istnieje.

+0

Co to jest * test nosa *? – wallyk

+0

To specyficzna struktura testów jednostkowych. –

+0

Co powiesz na sprawdzenie, czy istnieje jakiś plik, a jeśli go nie ma, oznacz go jako "test nosa" i zapobiegnij ładowaniu takich plików. – tglaria

Odpowiedz

2

Prawidłowe podejście polegałoby na wyśmiewaniu całego kodu z efektami ubocznymi (zakładam, że tego, czego się nie chce) z pustymi próbami.

Biorąc tested_module my_module:

def do_something_and_destroy_world(): 
    destroy_world() 
    return None 

Przykładowy plik testowy jest:

import mock 
import unittest 

import my_module 

class MyTest(unittest.TestCase): 
    def testSomethingUgly(self): 
     with mock.patch('my_module.destroy_world', return_value=None): 
      result = do_something_and_destroy_world() 
      self.assertIsNone(result) 

Gdy testy są prowadzone, twierdzenie będzie poprawne, a destroy_world nie można nazwać - zamiast tego dostać zastąpiona pustą próbą ze stałą wartością zwracaną.

+0

Nice. Nie sądzę, aby działał tak ładnie w moim bieżącym kodzie, ponieważ niechlujny kod nie jest faktycznie w metodzie. O ile nie mogę zrobić z makietą o imporcie, a nawet wtedy by się bałoby ... Ale dobrze jest wiedzieć, jak to zrobić w prawidłowy sposób ... –

6

Jak wspomniano w komentarzach, struktura tego kodu jest bałagan, a część z punktu testów jest upewnienie się, że nie łamią rzeczy kiedy byłaby ...

Tak, dla teraz (chyba, że ​​ktoś daje mi lepszą odpowiedź), używam:

if 'nose' not in sys.modules.keys(): 
    <read the data> 
Powiązane problemy