SORU
18 Kasım 2010, PERŞEMBE


Nasıl çıkış savunmak için python nosetest/unittest ile?

Bir sonraki fonksiyon testleri yazıyorum:

def foo():
    print 'hello world!'

Bu yüzden test etmek istediğimde bu kodu böyle olacak fonksiyonu

import sys
from foomodule import foo
def test_foo():
    foo()
    output = sys.stdout.getline().strip() # because stdout is an StringIO instance
    assert output == 'hello world!'

Ama eğer nosetests kaçarsam-s testi çöküyor parametre ile. Nasıl unittest veya burun modülü ile çıkış yakalayabilir miyim?

CEVAP
18 Kasım 2010, PERŞEMBE


Eğer gerçekten bunu yapmak istiyorsanız, sys yeniden atayabilirsiniz.test süresi için stdout.

def test_foo():
    import sys
    from foomodule import foo
    from StringIO import StringIO

    saved_stdout = sys.stdout
    try:
        out = StringIO()
        sys.stdout = out
        foo()
        output = out.getvalue().strip()
        assert output == 'hello world!'
    finally:
        sys.stdout = saved_stdout

Eğer bu kod yazıyor olsam, ancak foo işlevi out isteğe bağlı bir parametre geçmek istiyorum.

def foo(out=sys.stdout):
    out.write("hello, world!")

O zaman test çok basittir:

def test_foo():
    from foomodule import foo
    from StringIO import StringIO

    out = StringIO()
    foo(out=out)
    output = out.getvalue().strip()
    assert output == 'hello world!'

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • SPBedition

    SPBedition

    24 HAZİRAN 2013
  • tsweeney79

    tsweeney79

    21 Ocak 2008