Bagaimana cara menentukan satu tes dalam file dengan nosetests?

102

Saya memiliki file bernama test_web.py berisi kelas TestWeb dan banyak metode bernama seperti test_something ().

Saya dapat menjalankan setiap tes di kelas seperti ini:

$ 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
...

Tapi sepertinya saya tidak bisa menjalankan tes individu. Ini memberi saya kesalahan "Tidak ada pengujian seperti itu" saat dijalankan dalam PWD yang sama:

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

Apa yang salah di sini?

opstastic
sumber
tidak dapat membantu Anda kecuali Anda dapat memposting kasus pengujian atau SSCCE , saya baru saja mencoba sintaks yang Anda gunakan dengan hidung di mesin saya dan berfungsi dengan baik.
Jeff Tratner

Jawaban:

148

Anda harus menentukannya seperti ini:, nosetests <file>:<Test_Case>.<test_method>atau

nosetests test_web.py:TestWeb.test_checkout

Lihat dokumennya

Akan
sumber
6
Mengapa perpustakaan bumi menggunakan ':' bukan '.'? ;)
omikron
2
Mungkin untuk membuatnya mudah untuk membedakan antara modul dan kelas?
Chris
@omikron ketika saya menentukan file saya tidak memiliki kesalahan impor
gabeio
2
Wow, itu mengerikan, perpustakaan python klasik, tidak peduli dengan antarmuka yang ada
Dagrooms
16

Anda juga dapat menentukan modul:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
michaeljoseph
sumber
1
Saya tidak tahu apakah itu versi Python yang berbeda atau nosetestsatau apa, tetapi sintaks itu gagal. Apa yang tidak bekerja, meskipun, adalah: nosetests tests/test_integration:IntegrationTests.test_user_search_returns_users, berarti - file referensi sebagai file, bukan modul Python, menggunakan /daripada.
dwanderson
1
@dwanderson kedua penggunaan harus berfungsi, sesuai nose.readthedocs.io/en/latest/usage.html#selecting-tests . Kegagalan Anda dapat disebabkan karena teststidak menjadi modul dalam penyiapan Anda?
michaeljoseph
1
Ahh, itu benar, saya lupa __init__.pydi testsdirektori. Sudah selesai dilakukan dengan baik! Terima kasih
dwanderson
11

Menentukan nama pada baris perintah seperti yang disarankan jawaban lain tidak berfungsi dan berguna. Namun, ketika saya sedang mengerjakan tes menulis, saya sering menemukan bahwa saya hanya ingin menjalankan tes yang sedang saya kerjakan, dan nama yang harus saya tulis di baris perintah menjadi cukup panjang dan rumit untuk ditulis . Dalam kasus seperti itu, saya lebih suka menggunakan dekorator dan bendera khusus.

Saya mendefinisikan wipd("dekorator sedang dalam proses") seperti ini:

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

Ini mendefinisikan dekorator @wipdyang akan menyetel wipatribut pada objek yang didekorasi. Misalnya:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Kemudian -a wipdapat digunakan di baris perintah untuk mempersempit pelaksanaan pengujian ke yang ditandai dengan @wipd.

Catatan tentang nama ...

Saya menggunakan nama @wipduntuk dekorator daripada @wipuntuk menghindari masalah seperti ini:

import unittest
class Test(unittest.TestCase):

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

    def test_something_else(self):
        pass

Ini importakan menjadikan wipdekorator sebagai anggota kelas , dan semua tes di kelas akan dipilih. The attribPlugin cek kelas induk dari metode tes untuk melihat apakah atribut yang dipilih ada di sana juga, dan atribut yang dibuat dan diuji oleh attribtidak ada di ruang terpisah. Jadi jika Anda menguji dengan -a foodan kelas Anda berisi foo = "platypus", maka semua tes di kelas akan dipilih oleh plugin.

Louis
sumber
3

Untuk menjalankan beberapa pengujian tertentu, Anda cukup menambahkannya ke baris perintah, dipisahkan oleh spasi.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout
Skurpi
sumber
0

Dalam pengujian saya, menentukan pengujian dengan nama modul tidak berfungsi

Anda harus menentukan jalur sebenarnya ke .py:

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

Ini dengan nose==1.3.7

stephen
sumber
0

Persyaratan saya adalah menjalankan satu tes dalam file tes yang ada di direktori windows lain - ini dilakukan dari prompt perintah anaconda sebagai berikut:

menjalankan nosetests dari:

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

tetapi test_MyTestFile.py dan methodFile.py ada di:

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

jalankan pengujian tunggal dengan menyertakan jalur dengan tanda kutip sebagai berikut:

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

test_MyTestFile.py terlihat seperti ini:

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 terlihat seperti ini:

def add(num1, num2):
        return num1 + num2
Berikan Shannon
sumber