我正在移植一系列測試,從nosetests
+ python unittest
到py.test
。我很驚喜地發現py.test
支持python unittests
並且運行py.test
的現有測試就像在命令行上調用py.test
而不是nosetests
一樣簡單。但是,我在指定working directory進行測試時遇到問題。他們不在根項目目錄中,而是在一個子目錄中。目前的測試運行是這樣的:使用py.test模擬「nosetests -w working-dir」行爲
$ nosetests -w test-dir/ tests.py
從而改變當前的工作目錄test-dir
和tests.py
運行所有測試。然而,當我使用py.test
$ py.test test-dir/tests.py
所有的測試中tests.py
正在運行,但當前的工作目錄不會更改爲test-dir
。大多數測試假設工作目錄是test-dir
並嘗試打開並從中讀取文件,這顯然會失敗。
所以我的問題是如何在使用py.test
時更改所有測試的當前工作目錄。
這是很多的測試,我不想投入時間來解決所有問題,並使他們工作,無論順時針。
是的,我可以簡單地做cd test-dir; py.test tests.py
,但我習慣從項目根目錄開始工作,並且不想在每次運行測試時都進行CD操作。
下面是一些代碼,可能會給你更好的主意是我想實現:當我
my-project/
test-dir/
tests.py
testing-info.txt
然後:
內容的tests.py
:
import unittest
class MyProjectTestCase(unittest.TestCase):
def test_something(self):
with open('testing-info.txt', 'r') as f:
test something with f
目錄佈局嘗試運行測試:
$ pwd
my-project
$ nosetests -w test-dir tests.py
# all is fine
$ py.test ttest-dir/tests.py
# tests fail because they cannot open testing-info.txt
您應該需要更改目錄,我通常使用py.test從項目根目錄的'/ tests'中運行測試。你能舉出一個更明確的例子來說明你面臨的具體問題嗎? – jonrsharpe
@jonrsharpe我編輯的問題提供了一個更好的解釋我想做的事情。 –
您是否考慮讓測試相對於自己查找資源,而不是查找測試目錄?這將使您的測試更加明確地超出工作目錄問題。 – jonrsharpe