Làm cách nào để chỉ định một bài kiểm tra duy nhất trong một tệp với các bài kiểm tra?


102

Tôi có một tệp tên là test_web.py chứa một lớp TestWeb và nhiều phương thức có tên như test_something ().

Tôi có thể chạy mọi bài kiểm tra trong lớp như vậy:

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

Nhưng tôi dường như không thể chạy các bài kiểm tra riêng lẻ. Những điều này cho tôi lỗi "Không có bài kiểm tra như vậy" khi chạy trong cùng một NKT:

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

Điều gì có thể sai ở đây?


không thể giúp bạn trừ khi bạn có thể đăng các trường hợp thử nghiệm của mình hoặc một SSCCE , tôi vừa thử cú pháp mà bạn sử dụng với mũi trên máy của mình và nó hoạt động tốt.
Jeff Tratner

Câu trả lời:


148

Bạn phải chỉ định nó như sau: nosetests <file>:<Test_Case>.<test_method>hoặc

nosetests test_web.py:TestWeb.test_checkout

Xem tài liệu


6
Tại sao thư viện trên trái đất sử dụng ':' thay vì '.'? ;)
omikron

2
Có lẽ để dễ dàng phân định giữa mô-đun và lớp?
Chris

@omikron khi tôi đã chỉ định các tập tin tôi không có bất kỳ lỗi nhập
gabeio

2
Wow thật là khủng khiếp, các thư viện python cổ điển, không quan tâm đến các giao diện hiện có
Dagroom 20/02

16

Bạn cũng có thể chỉ định một mô-đun:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

1
Tôi không biết đó có phải là một phiên bản Python khác hay nosetestskhông, nhưng cú pháp đó không thành công. Có gì không làm việc, tuy nhiên, là: nosetests tests/test_integration:IntegrationTests.test_user_search_returns_users, có nghĩa là - các file tài liệu tham khảo như các file, không module Python, sử dụng /hơn.
dwanderson

1
@dwanderson cả hai cách sử dụng sẽ hoạt động, theo mũi.readthedocs.io / en / latest / usage.html#selecting-tests . Lỗi của bạn có thể do testskhông phải là một mô-đun trong thiết lập của bạn?
michaeljoseph

1
Ahh, đúng rồi, tôi quên một cái __init__.pytrong testsdanh bạ. Làm tốt! Cảm ơn
dwanderson

11

Chỉ định tên trên dòng lệnh giống như các câu trả lời khác gợi ý hoạt động và hữu ích. Tuy nhiên, khi tôi đang trong quá trình viết các bài kiểm tra, tôi thường thấy rằng tôi chỉ muốn chạy bài kiểm tra mà tôi đang thực hiện và những cái tên mà tôi sẽ phải viết trên dòng lệnh sẽ khá dài và khó viết. . Trong trường hợp như vậy, tôi thích sử dụng một trình trang trí tùy chỉnh và gắn cờ.

Tôi định nghĩa wipd("trình trang trí đang tiến hành") như thế này:

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

Điều này xác định một trình trang trí @wipdsẽ thiết lập wipthuộc tính trên các đối tượng mà nó trang trí. Ví dụ:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Sau đó, -a wipcó thể được sử dụng tại dòng lệnh để thu hẹp việc thực hiện thử nghiệm đối với những người được đánh dấu bằng @wipd.

Lưu ý về tên ...

Tôi đang sử dụng tên @wipdcho người trang trí thay vì @wipđể tránh loại vấn đề này:

import unittest
class Test(unittest.TestCase):

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

    def test_something_else(self):
        pass

Ý importmuốn làm cho người wiptrang trí trở thành một thành viên của lớptất cả các bài kiểm tra trong lớp sẽ được chọn. Các attribkiểm tra plugin của các tầng lớp phụ huynh của một phương pháp thử nghiệm để xem nếu thuộc tính lựa chọn tồn tại ở đó quá, và các thuộc tính được tạo ra và thử nghiệm bởi attribkhông tồn tại trong một không gian tách biệt. Vì vậy, nếu bạn kiểm tra với -a foovà lớp của bạn chứa foo = "platypus", thì tất cả các bài kiểm tra trong lớp sẽ được chọn bởi plugin.


3

Để chạy nhiều thử nghiệm cụ thể, bạn chỉ có thể thêm chúng vào dòng lệnh, được phân tách bằng dấu cách.

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

0

Trong các thử nghiệm của tôi, việc chỉ định các thử nghiệm có tên mô-đun không hoạt động

Bạn phải chỉ định đường dẫn thực tế đến .py:

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

Cái này với nose==1.3.7


0

Yêu cầu của tôi là chạy một thử nghiệm duy nhất trong một tệp thử nghiệm nằm trong một thư mục windows khác - điều này được thực hiện từ dấu nhắc lệnh anaconda như sau:

chạy nosetests từ:

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

nhưng test_MyTestFile.pymethodsFile.py đang ở:

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

chạy thử nghiệm đơn lẻ bằng cách bao gồm đường dẫn với dấu ngoặc kép như sau:

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

test_MyTestFile.py trông như thế này:

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 trông giống như sau:

def add(num1, num2):
        return num1 + num2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.