Pertanyaan Bagaimana saya menentukan satu tes dalam file dengan nosetests?


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

Saya dapat menjalankan setiap tes di kelas seperti:

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

Tetapi saya sepertinya tidak dapat menjalankan tes individual. Ini memberi saya "Tidak ada tes" kesalahan saat dijalankan di PWD yang sama:

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

Apa yang salah disini?


76
2017-07-02 00:26


asal


Jawaban:


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

nosetests test_web.py:TestWeb.test_checkout

Lihat dokumen


110
2017-07-02 00:58



Anda juga dapat menentukan modul:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

15
2017-08-20 10:19



Menentukan nama pada baris perintah seperti jawaban yang lain tidak berfungsi dan berguna. Namun, ketika saya berada di tengah-tengah tes tertulis, saya sering menemukan bahwa saya hanya ingin menjalankan tes yang sedang saya kerjakan, dan nama-nama yang harus saya tulis pada baris perintah menjadi sangat panjang dan tidak praktis untuk ditulis . Dalam hal demikian, saya lebih suka menggunakan dekorator dan bendera kustom.

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

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

Ini mendefinisikan dekorator @wipd yang akan mengatur wip atribut pada objek yang dihias. Contohnya:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Kemudian -a wip dapat digunakan di baris perintah untuk mempersempit pelaksanaan tes ke yang ditandai dengan @wipd.

Catatan nama ...

Saya menggunakan nama itu @wipd untuk dekorator daripada @wip untuk 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

Itu import akan membuat wip dekorator anggota kelas, dan semua tes di kelas akan dipilih. Itu attrib Plugin memeriksa kelas induk dari metode pengujian untuk melihat apakah atribut yang dipilih ada di sana juga, dan atribut yang dibuat dan diuji oleh attrib tidak ada di ruang terpisah. Jadi jika Anda menguji dengan -a foo dan kelas Anda berisi foo = "platypus", maka semua tes di kelas akan dipilih oleh plugin.


8
2017-07-08 15:09



Untuk menjalankan beberapa pengujian spesifik, Anda dapat menambahkannya ke baris perintah, dipisahkan oleh spasi.

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

3
2018-05-22 09:21



Dalam tes saya, menetapkan tes 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


0
2018-06-14 14:06