Używam py.test do przetestowania kodu DLL owiniętego w MyTester klasy Python. Dla celów walidacji muszę zarejestrować niektóre dane testowe podczas testów i później wykonać dalsze przetwarzanie. Ponieważ mam wiele testów _... chcę ponownie użyć tworzenia obiektów testowych (instancji MyTester) dla większości moich testów.py.test: Przekaż parametr do funkcji urządzenia
Ponieważ obiektem testującym jest ten, który uzyskał odniesienia do zmiennych i funkcji DLL, muszę przekazać listę zmiennych DLL do obiektu testera dla każdego z plików testowych (zmienne, które mają być rejestrowane są takie same dla plik testowy _...). Treść listy służy do rejestrowania określonych danych.
Mój pomysł jest zrobić to jakoś tak:
import pytest
class MyTester():
def __init__(self, arg = ["var0", "var1"]):
self.arg = arg
# self.use_arg_to_init_logging_part()
def dothis(self):
print "this"
def dothat(self):
print "that"
# located in conftest.py (because other test will reuse it)
@pytest.fixture()
def tester(request):
""" create tester object """
# how to use the list below for arg?
_tester = MyTester()
return _tester
# located in test_...py
# @pytest.mark.usefixtures("tester")
class TestIt():
# def __init__(self):
# self.args_for_tester = ["var1", "var2"]
# # how to pass this list to the tester fixture?
def test_tc1(self, tester):
tester.dothis()
assert 0 # for demo purpose
def test_tc2(self, tester):
tester.dothat()
assert 0 # for demo purpose
Czy to możliwe, aby osiągnąć to w ten sposób, czy jest tam jeszcze bardziej elegancki sposób?
Zwykle mogę to zrobić dla każdej metody testowej z jakąś funkcją konfiguracji (styl xUnit). Ale chcę uzyskać pewnego rodzaju ponowne wykorzystanie. Czy ktokolwiek wie, czy jest to możliwe z urządzeniami w ogóle?
wiem, że mogę zrobić coś takiego: (od docs)
@pytest.fixture(scope="module", params=["merlinux.eu", "mail.python.org"])
Ale muszę do parametryzacji bezpośrednio w module testowym. Czy jest możliwy dostęp do atrybutu params urządzenia z modułu testowego?
Dzięki za podpowiedź z funkcją wewnątrz urządzenia. Zajęło mi trochę czasu, zanim będę mógł nad tym popracować, ale jest to całkiem przydatne! – maggie