Nosetests içeren bir dosyada tek bir testi nasıl belirtebilirim?


102

Bir TestWeb sınıfı ve test_something () gibi birçok yöntem içeren test_web.py adında bir dosyam var.

Sınıftaki her testi şöyle yapabilirim:

$ nosetests test_web.py 
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...

Ama tek tek testler yapamıyorum. Aynı PWD'de çalıştırıldığında bunlar bana "Böyle bir test yok" hatası veriyor:

$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout

Burada ne yanlış olabilir?


Test durumlarınızı veya bir SSCCE'yi gönderemediğiniz sürece size yardımcı olamam , sadece makinemde burun ile kullandığınız sözdizimini denedim ve iyi çalıştı.
Jeff Tratner

Yanıtlar:


148

Bunu şu şekilde belirtmelisiniz: nosetests <file>:<Test_Case>.<test_method>veya

nosetests test_web.py:TestWeb.test_checkout

Dokümanlara bakın


6
Kitaplık neden "." Yerine ":" kullanıyor? ;)
omikron

2
Belki bir modül ve bir sınıf arasında ayrım yapmayı kolaylaştırmak için?
Chris

@omikron Dosyayı belirttiğimde herhangi bir içe aktarma hatası olmadı
gabeio

2
Vay canına, bu korkunç, klasik python kitaplıkları, mevcut arayüzler için bir bakım değil
Dagrooms

16

Ayrıca bir modül de belirtebilirsiniz:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

1
Python'un farklı bir sürümü mü nosetestsya da ne olduğunu bilmiyorum ama bu sözdizimi başarısız oluyor. Ne yapar işi olsa da, geçerli: nosetests tests/test_integration:IntegrationTests.test_user_search_returns_usersanlamı - kullanarak değil Python modülleri, dosyaları olarak referans dosyaları /ziyade.
dwanderson

1
@dwanderson, her iki kullanımın da, nose.readthedocs.io/en/latest/usage.html#selecting-tests uyarınca çalışmalıdır . Başarısızlığınız testskurulumunuzda bir modül olmadığınızdan kaynaklanıyor olabilir mi?
michaeljoseph

1
Ahh, doğru olduğunu, bir unuttum __init__.pyiçinde testsdizine. Aferin! Teşekkür
dwanderson

11

Diğer yanıtların önerdiği gibi komut satırında isim belirtmek işe yarıyor ve kullanışlıdır. Bununla birlikte, yazma testlerinin ortasındayken, genellikle sadece üzerinde çalıştığım testi çalıştırmak istediğimi ve komut satırına yazmam gereken isimlerin oldukça uzun ve yazmanın zahmetli olduğunu fark ediyorum. . Böyle bir durumda, özel bir dekoratör ve bayrak kullanmayı tercih ederim.

Ben wipd("devam eden dekoratör") tanımlıyorum :

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

Bu, süslediği nesneler üzerindeki niteliği @wipdayarlayacak bir dekoratör tanımlar wip. Örneğin:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Daha sonra -a wip, testin yürütülmesini ile işaretlenenlerle sınırlandırmak için komut satırında kullanılabilir @wipd.

İsimlerle ilgili not ...

Bu tür problemlerden kaçınmak @wipdyerine dekoratörün adını kullanıyorum @wip:

import unittest
class Test(unittest.TestCase):

    from mymodule import wip    
    @wip
    def test_something(self):
        pass

    def test_something_else(self):
        pass

importYapacak wipdekoratör üye sınıfının ve tüm sınıfta testler seçilecektir. attribTarafından oluşturulan ve test edilir seçilen özellik çok mevcutsa bir test metodunun ana sınıfı görmek için eklenti kontrol eder ve nitelikleri attribyapmak bir ayrılmış alana bulunmaz. Yani, ile test -a fooederseniz foo = "platypus"ve sınıfınız şunları içeriyorsa , bu durumda sınıftaki tüm testler eklenti tarafından seçilecektir.


3

Birden çok özel testi çalıştırmak için, bunları boşlukla ayırarak komut satırına ekleyebilirsiniz.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout

0

Benim testlerde, modül adları ile belirten testleri eser yok

Şunlara giden gerçek yolu belirtmelisiniz .py:

nosetests /path/to/test/file.py:test_function

Bu ile nose==1.3.7


0

Gereksinimim, başka bir Windows dizininde bulunan bir test dosyasında tek bir test yapmaktı - bu, anaconda komut isteminden aşağıdaki gibi yapıldı:

nosetestler çalıştırdı :

(base) C:\Users\ABC\Documents\work\

ama test_MyTestFile.py ve methodsFile.py vardı:

 (base) C:\Users\ABC\Documents\work\daily\

tarafından tek testi yolunu dahil olan tırnak şöyle:

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.py şuna benziyordu:

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

methodFile.py şuna benziyordu:

def add(num1, num2):
        return num1 + num2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.