ฉันจะระบุการทดสอบเดี่ยวในไฟล์ที่มี nosetests ได้อย่างไร


102

ฉันมีไฟล์ชื่อ test_web.py ที่มีคลาส TestWeb และวิธีการมากมายที่มีชื่อว่า test_something ()

ฉันสามารถเรียกใช้การทดสอบทุกอย่างในชั้นเรียนดังนี้:

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

แต่ดูเหมือนฉันจะทำการทดสอบแต่ละรายการไม่ได้ สิ่งเหล่านี้ทำให้ฉันมีข้อผิดพลาด "ไม่มีการทดสอบ" เมื่อทำงานใน PWD เดียวกัน:

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

มีอะไรผิดปกติที่นี่?


ไม่สามารถช่วยคุณได้เว้นแต่คุณจะสามารถโพสต์กรณีทดสอบหรือSSCCEได้ฉันเพิ่งลองใช้ไวยากรณ์ที่คุณใช้กับจมูกในเครื่องของฉันและมันก็ใช้ได้ดี
Jeff Tratner

คำตอบ:


148

คุณต้องระบุดังนี้: nosetests <file>:<Test_Case>.<test_method>, หรือ

nosetests test_web.py:TestWeb.test_checkout

ดูเอกสาร


6
ทำไมห้องสมุดบนโลกจึงใช้ ':' แทน '.' ;)
omikron

2
อาจจะทำให้ง่ายต่อการแยกแยะระหว่างโมดูลและคลาส?
คริส

@omikron เมื่อฉันระบุไฟล์ฉันไม่มีข้อผิดพลาดในการนำเข้า
gabeio

2
ว้าวแย่มากห้องสมุด python แบบคลาสสิกไม่สนใจอินเทอร์เฟซที่มีอยู่
Dagrooms

16

คุณยังสามารถระบุโมดูล:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

1
ฉันไม่รู้ว่าเป็น Python เวอร์ชันอื่นnosetestsหรืออะไร แต่ไวยากรณ์นั้นล้มเหลว สิ่งที่ไม่ทำงาน แต่เป็น: nosetests tests/test_integration:IntegrationTests.test_user_search_returns_usersความหมาย - ไฟล์อ้างอิงเป็นไฟล์ไม่โมดูลหลามใช้/มากกว่า.
dwanderson

1
@dwanderson ทั้งประเพณีควรจะทำงานตามnose.readthedocs.io/en/latest/usage.html#selecting-tests ความล้มเหลวของคุณอาจเกิดจากtestsไม่มีโมดูลในการตั้งค่าของคุณ?
michaeljoseph

1
อ่าถูกต้องฉันลืม__init__.pyในtestsไดเร็กทอรี ทำได้ดี! ขอบคุณ
dwanderson

11

การระบุชื่อบนบรรทัดคำสั่งเหมือนกับคำตอบอื่น ๆ ที่แนะนำใช้งานได้และมีประโยชน์ อย่างไรก็ตามเมื่อฉันอยู่ระหว่างการทดสอบการเขียนฉันมักจะพบว่าฉันต้องการเรียกใช้การทดสอบที่ฉันกำลังทำอยู่และชื่อที่ฉันจะต้องเขียนในบรรทัดคำสั่งนั้นค่อนข้างยาวและยุ่งยากในการเขียน . ในกรณีนี้ฉันชอบใช้มัณฑนากรและแฟล็กแบบกำหนดเอง

ฉันกำหนดwipd("มัณฑนากรที่อยู่ระหว่างดำเนินการ") ดังนี้:

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

สิ่งนี้กำหนดมัณฑนากร@wipdซึ่งจะตั้งค่าwipแอตทริบิวต์บนวัตถุที่ตกแต่ง ตัวอย่างเช่น:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

จากนั้นสามารถนำมาใช้ในบรรทัดคำสั่งเพื่อทำการดำเนินการทดสอบกับคนที่ทำเครื่องหมายด้วย-a wip@wipd

หมายเหตุชื่อ ...

ฉันใช้ชื่อ@wipdมัณฑนากรแทน@wipเพื่อหลีกเลี่ยงปัญหาประเภทนี้:

import unittest
class Test(unittest.TestCase):

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

    def test_something_else(self):
        pass

importจะทำให้wipมัณฑนากรเป็นสมาชิกของชั้นและทุกการทดสอบในชั้นเรียนจะถูกเลือก attribตรวจสอบปลั๊กอินชั้นผู้ปกครองของวิธีการทดสอบเพื่อดูว่าแอตทริบิวต์ที่เลือกอยู่มีมากเกินไปและแอตทริบิวต์ที่มีการสร้างและการทดสอบโดยattribไม่ได้อยู่ในพื้นที่ที่แยก ดังนั้นหากคุณทดสอบด้วย-a fooและในชั้นเรียนของคุณมีfoo = "platypus"การทดสอบทั้งหมดในชั้นเรียนจะถูกเลือกโดยปลั๊กอิน


3

หากต้องการเรียกใช้การทดสอบเฉพาะหลายรายการคุณสามารถเพิ่มลงในบรรทัดคำสั่งโดยคั่นด้วยช่องว่าง

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

0

ในการทดสอบของฉันการระบุการทดสอบด้วยชื่อโมดูลใช้ไม่ได้

คุณต้องระบุเส้นทางจริงไปยัง.py:

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

นี้ด้วย nose==1.3.7


0

ความต้องการของฉันคือเรียกใช้การทดสอบเดียวในไฟล์ทดสอบที่อยู่ในไดเร็กทอรีwindowsอื่นซึ่งทำได้จากพรอมต์คำสั่ง anacondaดังนี้:

ทำการทดสอบnosetestsจาก:

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

แต่test_MyTestFile.pyและmethodFile.pyอยู่ใน:

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

เรียกใช้การทดสอบเดี่ยวโดยรวมเส้นทางด้วยเครื่องหมายคำพูดดังนี้:

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

test_MyTestFile.py มีลักษณะดังนี้:

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 มีลักษณะดังนี้:

def add(num1, num2):
        return num1 + num2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.