Python unit test: stdout testovaneho do souboru

JanS

Python unit test: stdout testovaneho do souboru
« kdy: 27. 05. 2016, 15:39:34 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky


gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #1 kdy: 27. 05. 2016, 17:07:13 »
zkuste před voláním funkce přepsat sys.stdout a po konci volání ho přepsat zpět. Jde to udělat wrapperem.

gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #2 kdy: 27. 05. 2016, 17:34:05 »
Kód: [Vybrat]
import sys
from contextlib import contextmanager
import functools

@contextmanager
def stdout(filename):
    with open(filename, 'a') as outfile:
        stdout_old = sys.stdout
        sys.stdout = outfile
        yield
        sys.stdout = stdout_old


def redirect_stdout(f, filename):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        with stdout(filename):
            f(*args, **kwargs)
    return wrapper



def testfn():
    print 'hello'

testfn() # vypise hello na standartni vystup

testfn = redirect_stdout(testfn, 'somefile.txt')

testfn() # vypise hello do souboru somefile.txt


gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #3 kdy: 27. 05. 2016, 17:48:37 »
Zapoměl jsem return. Mělo to být:

Kód: [Vybrat]
def redirect_stdout(f, filename):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        with stdout(filename):
            return f(*args, **kwargs)
    return wrapper

gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #4 kdy: 27. 05. 2016, 18:19:48 »
*zapomněl


JanS

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #5 kdy: 30. 05. 2016, 12:38:03 »
Vypada, ze to funguje.
Deluji

Martin

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #6 kdy: 30. 05. 2016, 16:03:12 »
Ještě je potřeba ošetřit výjimky - přidat finally, tak jak je to v příkladu na https://docs.python.org/2/library/contextlib.html#contextlib.closing. Jinak k navrácení původní stdout nedojde.

Kit

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #7 kdy: 30. 05. 2016, 16:40:27 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #8 kdy: 30. 05. 2016, 16:48:25 »
Ještě je potřeba ošetřit výjimky - přidat finally, tak jak je to v příkladu na https://docs.python.org/2/library/contextlib.html#contextlib.closing. Jinak k navrácení původní stdout nedojde.

Děkuji za upozornění

Kód: [Vybrat]
@contextmanager
def stdout(filename):
    with open(filename, 'a') as outfile:
        stdout_old = sys.stdout
        sys.stdout = outfile
        try:
            yield
        finally:
            sys.stdout = stdout_old

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Python unit test: stdout testovaneho do souboru
« Odpověď #9 kdy: 01. 06. 2016, 07:03:35 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

+1

Proc proste jen nepredat stream (nebo nejaky Python ekvivalent) jako parametr funkce?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python unit test: stdout testovaneho do souboru
« Odpověď #10 kdy: 01. 06. 2016, 09:42:27 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

+1

Proc proste jen nepredat stream (nebo nejaky Python ekvivalent) jako parametr funkce?

Co je to za programátora, který tak nějak samozřejmě předpokládá, že může hrabat do zdrojáku?

gl

Re:Python unit test: stdout testovaneho do souboru
« Odpověď #11 kdy: 01. 06. 2016, 09:54:02 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

+1

Proc proste jen nepredat stream (nebo nejaky Python ekvivalent) jako parametr funkce?

Co je to za programátora, který tak nějak samozřejmě předpokládá, že může hrabat do zdrojáku?

Nerozumím.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python unit test: stdout testovaneho do souboru
« Odpověď #12 kdy: 01. 06. 2016, 10:00:19 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

+1

Proc proste jen nepredat stream (nebo nejaky Python ekvivalent) jako parametr funkce?

Co je to za programátora, který tak nějak samozřejmě předpokládá, že může hrabat do zdrojáku?

Nerozumím.
Mám-li funkci, která něco posílá do stdout, tak je rada "neposílat nic do stdout" poněkud knížecí.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Python unit test: stdout testovaneho do souboru
« Odpověď #13 kdy: 01. 06. 2016, 10:02:07 »
Zdravim,
pisu unit test funkce, ktera generuje kopec veci do stdout. Stdout vystup funkce chci presmerovat do souboru, ale vystupy testu nechat v stdout.
Nejake tipy?
Diky

Možná to zní jako divná rada, kterou však praktikuji: Ve funkcích nic neposílat do stdout.

+1

Proc proste jen nepredat stream (nebo nejaky Python ekvivalent) jako parametr funkce?

Co je to za programátora, který tak nějak samozřejmě předpokládá, že může hrabat do zdrojáku?

To jako testuju kod knihovny, do ktere nemuzu hrabat, nebo jak to mam chapat? Vetsinou se pisi unit testy pro kod vlastni tvorby. Pokud se takto chova nejaka knihovna pouzita v mem kodu, tak ji budto nahradim normalni alternativou (nepovazuji za normalni takto nevyzadane spamovat vystup), nebo to resim se zodpovednou osobou/firmou.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python unit test: stdout testovaneho do souboru
« Odpověď #14 kdy: 01. 06. 2016, 10:09:05 »
Co je to za programátora, který tak nějak samozřejmě předpokládá, že může hrabat do zdrojáku?

To jako testuju kod knihovny, do ktere nemuzu hrabat, nebo jak to mam chapat? Vetsinou se pisi unit testy pro kod vlastni tvorby. Pokud se takto chova nejaka knihovna pouzita v mem kodu, tak ji budto nahradim normalni alternativou (nepovazuji za normalni takto nevyzadane spamovat vystup), nebo to resim se zodpovednou osobou/firmou.
Omlouvám se, beru zpět. V případě, že se jedná o unittesty, tak máš pravdu. (Nějak jsem si zvykl na Kitovo debilní komentáře, a tak jsem to přehlédl.)