2012-12-05 35 views
2

我們在一個項目中使用py.test,並在大多數測試用例中使用fixtures。但我認爲沒有可能在doctest文件中使用燈具。是否有可能在doctest文件中使用py.test裝置?

舉個例子一些代碼片段:我有一個瀏覽器支架,像conftest.py:

@fixture 
def browser(request): 
    from wsgi_intercept import zope_testbrowser 
    browser = zope_testbrowser.WSGI_Browser() 
    [...] 
    return browser 

,並用它在文件test_browser.txt這樣的:

>>> browser.open('some_url') 
>>> browser.url == 'some_url' 
True 

但我看不到將燈具放入doctest文件的方法。 py.test完全可能嗎?

+0

我相信doctests應該顯示工作示例,所以使用fixtures沒有任何意義。如果您將它們用於測試目的而不是記錄行爲,那麼您應該將它們轉換爲單位測試。 – Bakuriu

+0

我無法真正理解你的觀點,爲什麼這是沒有道理的。是的,doctests顯示工作示例,在這種情況下作爲功能測試。我只想在同一個中心位置保持相同的配置,我已經在單元測試中用於功能測試,例如測試。 – j23d

回答

3

目前尚不支持。 Pytest在收集時需要知道哪些裝置將用於文檔測試。如果我們能夠想出一種方法來聲明要使用哪種燈具,則不應該很難爲_pytest/doctest.py添加支持。也許還可以自動找出文檔測試需要哪些燈具,不確定。

+0

感謝您的回答。與此同時,我在nose中看到了doctest-fixture選項(https://nose.readthedocs.org/en/latest/usage.html?highlight=fixtures#cmdoption--doctest-fixtures),並認爲它應該是可能的。但是現在我知道它還沒有實現。 – j23d

+0

您是否嘗試過nose-doctest-fixture支持並對此感到滿意?我認爲在doctest文本中使用特殊的語法來指定燈具會很好。我目前沒有使用doctest,所以我會很樂意提供建議。類似於「.. pytest-fixtures:name1,name2,name3」的行可以在收集時預先掃描,然後在執行時進行設置,以成爲doctest執行的「globs」的一部分。 – hpk42

+0

不,我沒有嘗試過,只能閱讀文檔(https://nose.readthedocs.org/en/latest/doc_tests/test_doctest_fixtures/doctest_fixtures.html)。這裏描述的doctest setup和teardown方法似乎是doctest特有的。如果我理解你的建議,我已經擁有的相同燈具也可以用於文件測試。因爲這是我所尋找的,所以我最喜歡後者。你認爲這是值得一個問題嗎? – j23d

2

有一個pull request試圖通過pytest repository執行此操作。它提供了兩個全局文件測試文件,即fixture_requestget_fixture(這是fixture_request.getfuncargvalue的便捷快捷方式)。預期用途是:

>>> browser = get_fixture('browser') 
>>> browser.open('some_url') 

這是從.. pytest-fixtures: ...線不同,因爲在Holger上述建議,但執行起來比較方便... :)不用說,這是拿出來討論,當然!

相關問題