nosetest가있는 파일에서 단일 테스트를 지정하려면 어떻게합니까?


102

TestWeb 클래스와 test_something ()과 같은 많은 메서드를 포함하는 test_web.py라는 파일이 있습니다.

클래스의 모든 테스트를 다음과 같이 실행할 수 있습니다.

$ 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에서 실행할 때 "No such test"오류가 발생합니다.

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

여기서 무엇이 잘못 되었을까요?


테스트 케이스 또는 SSCCE를 게시 할 수없는 경우 도움이되지 않습니다. 방금 내 컴퓨터에서 nose와 함께 사용한 구문을 시도했는데 제대로 작동했습니다.
Jeff Tratner

답변:


148

다음과 같이 지정해야합니다. nosetests <file>:<Test_Case>.<test_method>또는

nosetests test_web.py:TestWeb.test_checkout

문서 보기


6
어스 라이브러리에서 '.'대신 ':'를 사용하는 이유는 무엇입니까? )
omikron

2
모듈과 클래스 사이를 쉽게 묘사 할 수 있도록 만들까요?
Chris

@omikron 파일을 지정할 때 가져 오기 오류가 없었습니다
gabeio

2
와우, 끔찍하고 고전적인 파이썬 라이브러리입니다. 기존 인터페이스는 신경 쓰지 않습니다
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 2017 년

1
아, 맞습니다 . 디렉토리 __init__.py에있는 것을 잊었습니다 tests. 잘 했어! 감사합니다
dwanderson

11

다른 답변과 마찬가지로 명령 줄에 이름을 지정하면 효과가 있고 유용합니다. 그러나 테스트를 작성하는 중에 작업중인 테스트 만 실행하고 싶은 경우가 많으며 명령 줄에 작성해야하는 이름이 꽤 길고 작성하기 번거로워집니다. . 이 경우 커스텀 데코레이터와 플래그를 사용하는 것을 선호합니다.

나는 다음과 같이 wipd( "work in progress decorator")를 정의 합니다 :

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

importwip장식 멤버 클래스의 , 그리고 모든 클래스의 시험은 선택됩니다. 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 명령 프롬프트 에서 수행되었습니다 .

다음에서 코 테스트 를 실행 했습니다.

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

그러나 test_MyTestFile.pymethodsFile.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

methodsFile.py 는 다음과 같습니다.

def add(num1, num2):
        return num1 + num2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.