2012-03-13 17 views
7

Tôi đã cố gắng để thực hiện một hệ thống thử nghiệm nguồn đơn cho phép thử nghiệm tự động trên nhiều phiên bản Python bằng cách sử dụng độc tố + nosetests.python - Chạy độc tố + nosetests trên một Python 3.2 testenv

Vấn đề là, tôi không thể làm cho nó hoạt động bất cứ khi nào tôi thử nghiệm với Python 3.2. Mọi thứ hoạt động tốt nếu tôi loại trừ Python 3.2.

Dưới đây là tôi tox.ini:

[tox] 
envlist = py25,py26,py27,py32,pypy,jython 

[testenv] 
commands = 
    nosetests [] 
deps = 
    nose 
    mock 

[testenv:py32] 
commands = 
    nosetests [] 

~/.noserc tôi:

[nosetests] 
verbosity=2 
with-doctest=1 

tôi đã thiết lập các use_2to3 cờ để True trong setup.py của tôi, nhưng lỗi này vẫn tiếp tục hiển thị: NameError: global name 'basestring' is not defined. Có vẻ như tôi đang thiếu một số thiết lập mà nên làm cho công việc 2to3, nhưng tôi không biết nó là gì.

Ngoài ra, tôi đã thử thay thế nosetests [] bằng python setup.py test trong cài đặt testenv:py32. Thật không may, không chỉ lỗi tương tự tiếp tục hiển thị, nó cũng giới thiệu một lỗi khác: Error in atexit._run_exitfuncs: TypeError: 'NoneType' object is not callable.

Mọi con trỏ?

EDIT: thêm mã trong setup.py, trong trường hợp đó là hữu ích:

# handle python 3 
if sys.version_info >= (3,): 
    use_2to3 = True 
else: 
    use_2to3 = False 

và đâu đó trong setup(): use_2to3 = use_2to3

+0

Nếu bạn đang sử dụng 2to3, bạn cần đảm bảo nó chạy 'setup.py' và các thử nghiệm đối với phiên bản được tạo, thay vì thử nghiệm dựa vào nguồn chính. Tôi đã không sử dụng 'độc tố ', nhưng nói chung bạn có thể chạy' python setup.py build', sau đó thay đổi vào thư mục build, và chạy nosetests. –

+1

Tôi nghĩ đó là những gì độc tố đang làm. Nó làm cho các virtualenv riêng biệt cho các phiên bản/triển khai python riêng biệt này. Ví dụ: nó phát ra lỗi nếu tôi không bao gồm '' từ __future__ nhập with_statement'' trong python2.5 env, nhưng không phải trong python2.7. Chuyển đổi '' 2to3'' dường như đang hoạt động, nhưng vì lý do nào đó '' độc tố' không tự động kiểm tra ... – bow

+0

Đảm bảo rằng nó không chạy 'nosetests' từ thư mục nguồn, sẽ có mã chưa được dịch. –

Trả lời

1

Bạn có thể sử dụng một cái gì đó như thế này trong [testenv] phần:

changedir = {envtmpdir} 
commands = nosetests package # "package" is import name of the package under test 

hoặc nếu bạn có các thử nghiệm trong một thư mục riêng biệt hơn gói:

changedir = tests # directory where tests are living 
commands = nosetests [] 

Điều này sẽ ngăn không cho bạn nhặt nhầm phiên bản gói.