2013-04-08 30 views
13

Tôi gặp sự cố khi chạy thử nghiệm đơn vị thử nghiệm với pyDev. Tôi cố gắng chạy một bài kiểm tra đơn vị với một mô-đun chia sẻ mô-đun và một finalizer mà nên được excecuted sau khi thử nghiệm cuối cùng. Nhưng khi chạy thử nghiệm đơn vị trong pyDev, nó không sử dụng cùng một cá thể mà thay vào đó tạo ra hai cá thể khác nhau. Ví dụ đang chạy tốt trong bảng điều khiển hoặc khi bắt đầu từ tập lệnh trong pydev.PyDev chạy thử nghiệm đơn vị thử nghiệm với mô-đun được chia sẻ không thành công

Tôi đang sử dụng nền tảng Python 2.7.3, pytest-2.3.4, pyDev 2.7.3.2013031601, Eclipse 4.2 trên Win7.

tôi đã cố gắng dụ từ http://pytest.org/latest/fixture.html

Kết quả từ PyDev là:

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027F9080> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027FF3C8> 

Giao diện điều khiển đầu ra là:

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 

Đó là hành vi mong đợi. Tôi đang làm gì sai ??

mã được sử dụng là conftest.py:

import pytest 
import smtplib 

@pytest.fixture(scope="module") 
def smtp(): 
return smtplib.SMTP("merlinux.eu") 

Các mã kiểm tra trong test_smtplib.py:

# content of test_module.py 
def test_ehlo(smtp): 
    response = smtp.ehlo() 
    assert response[0] == 250 
    assert "merlinux" in response[1] 
    assert 0 # for demo purposes 

def test_noop(smtp): 
    response = smtp.noop() 
    assert response[0] == 250 
    assert 0 # for demo purposes 

Chạy thử nghiệm từ kịch bản với:

import pytest,os 
os.chdir("[path_to_tests]/tests") #your file location 
pytest.main(['-s', 'test_smtplib.py']) 

gợi ý Bất kỳ và cảm ơn rất nhiều vì sự giúp đỡ của bạn!

+0

Bạn đã định cấu hình IDE PyDev của mình để sử dụng trình kiểm tra ** py.test ** (* Window -> Preferences -> PyDev -> PyUnit -> Test Runner *)? –

+0

Có, PyDev Test Runner được chọn. – MBaumann

+0

Không, không phải là * PyDev Test Runner *, bạn cũng nên có khả năng chọn *** Py.test ** Test Runner * -> xem: http://up.picr.de/14054750vh.jpg –

Trả lời

1

Tôi không có nhật thực nhưng tôi đã xem xét mã nguồn cho Pydev và pytest. pytest không sử dụng đa xử lý theo mặc định nhưng nó sẽ nếu bạn đã cài đặt xdist. Có lẽ bạn có nó? Hoặc có lẽ Eclipse đã cài đặt nó?

Nếu bạn vẫn có sẵn hệ thống, bạn có thể thử đặt tùy chọn bên dưới trong thông số pytest của mình không? Nó chỉ đơn giản là nói với pytest để sử dụng một quá trình khi sử dụng xdist as documented here.

-n=1 hoặc có lẽ nó sẽ thích -n 1

Nếu điều đó không làm việc, thì đây cũng không nên làm việc nhưng bạn có thể thử nó? Sử dụng tùy chọn bên dưới trong các tùy chọn pytest như trước (không có trong tùy chọn runner thử nghiệm pydev) để bật thử nghiệm cấp mô-đun. Đó là một lựa chọn á hậu thử nghiệm pydev vì vậy tôi đoán nó sẽ gây ra một lỗi, nhưng có thể một số mã khác mà phím tắt tùy chọn sẽ sử dụng nó.

--split_jobs=module hay một lần nữa có lẽ --split_jobs module

1

Có vẻ như đây là một lỗi tồn tại từ lâu ở phía PyDev. Tôi vừa sửa nó và gửi yêu cầu kéo tới Pydev, xem https://github.com/fabioz/Pydev/pull/120. Trong khi đó, bạn có thể có thể đưa ra những thay đổi nhỏ và áp dụng cho phiên bản cài đặt của bạn của pydev, cho phép chạy pydev/pytest thích hợp với phạm vi.

+0

Chỉ cần áp dụng bản sửa lỗi. Nó sẽ sớm có trong bản dựng hàng đêm (và bản phát hành tiếp theo với bản sửa lỗi sẽ là PyDev 3.5.0) –

Các vấn đề liên quan