2009-09-21 42 views
47

Có lý do nào khiến Nose không thể tìm thấy các thử nghiệm trong Ubuntu 9.04 không?Mũi không thể tìm thấy các thử nghiệm trong ubuntu

Tôi đang sử dụng mũi 0.11.1 với python 2.5.4.
Tôi chỉ có thể chạy thử nghiệm nếu tôi chỉ định rõ tên tệp. Nếu tôi không chỉ định tên tệp mà nó chỉ nói, 0 kiểm tra.

Cùng một dự án chạy thử nghiệm tốt trên máy Mac của tôi, vì vậy tôi khá bối rối!

+0

Bạn đang nhập chính xác lệnh nào khi bạn muốn chạy thử? –

+0

"nosetests --with-gae" hoặc chỉ "nosetests". Tôi cũng đã thử "kiểm tra nosetests", nơi "test" là tên của thư mục tập tin thử nghiệm của tôi. Tất cả các lệnh hoạt động hoàn hảo trên Mac, không có cấu hình mũi nào được thay đổi trên cả hai máy. Tôi làm việc trong ubuntu nếu tôi nhập các tệp thử nghiệm trong thư mục __init__.py của thư mục kiểm tra và chạy "kiểm tra nosetests". Tuy nhiên, điều này không bền vững. –

+10

Thử chạy 'nosetests' với một vài' -v''s… '-vv' thường cho tôi đủ thông tin để giải quyết vấn đề của tôi. –

Trả lời

6

Một số những gì liên quan, nếu bạn đang chạy thử nghiệm tắt của một thư mục tức là

nosetests ... tests/ 

nơi kiểm tra là tên của thư mục với các bài kiểm tra của tôi và có các hàm thử nghiệm python riêng biệt trong một trong các mô-đun .py ... Các hàm của bạn phải bắt đầu bằng 'test' cho các nosetests để nhận ra đó là một thử nghiệm bạn muốn chạy.

ví dụ:

def test_something(): 
    ... 

nosetests sẽ chạy chức năng này khi được thực thi trong thư mục này trong khi

def somethin_to_test(): 
    ... 

sẽ không được.

54

Hành vi này gần như chắc chắn vì tệp của bạn không được đặt tên phù hợp với hành vi đối sánh thử nghiệm của mũi. Từ the nose docs:

mũi thu thập các kiểm tra tự động từ các tệp nguồn python, thư mục và gói được tìm thấy trong thư mục làm việc hiện tại). Bất kỳ tệp, thư mục hoặc gói nguồn python nào phù hợp với biểu thức chính quy testMatch (theo mặc định: (?:^| [B _.-]) [Tt] est) sẽ được thu thập làm thử nghiệm (hoặc nguồn để thu thập thử nghiệm) .

Nhấn mạnh là của tôi.

Một số tên ví dụ mà sẽ phù hợp:

  • TestFoo.py
  • Foo-Test.py
  • Foo_Test.py
  • Foo.Test.py (lưu ý rằng điều này sẽ cố gắng nhập Foo và sẽ tăng ngoại lệ nếu không thể)

Tên là trông giống như nó sẽ là matc h, nhưng thực sự không:

  • FooTest.py

Nếu bạn chỉ cần đổi tên file của bạn, bạn sẽ được tốt để đi.


Cập nhật: Bạn đã đọc this blog post chưa? Tôi đã không thể nói từ các chi tiết bạn đã đăng, nhưng có thể thư mục kiểm tra của bạn đang thiếu các tệp __init__.py của họ?

... đảm bảo rằng thư mục “kiểm tra” của bạn thực sự là mô-đun (chúng có tệp rỗng __init__.py).

+2

sẽ cố gắng ... điều là, các tập tin tương tự đặt cược nhặt trên máy Mac của tôi ... không mũi sử dụng cùng một matcher trên tất cả các nền tảng? –

+0

Biến môi trường NOSE_TESTMATCH của bạn có thể được đặt khác hoặc xem mũi/config.py. http://code.google.com/p/python-nose/wiki/FindingAndRunningTests –

+0

Các thử nghiệm hoạt động khi tôi nhập tệp thử nghiệm vào __init__.py và chỉ định mô-đun để chạy. Không khác. Các thư mục và lệnh giống nhau hoạt động tốt trên máy Mac của tôi, mặc dù, thậm chí không chỉ rõ thư mục. Vẫn không thể tìm ra được. –

95

Điều khác mà luôn là được tôi với nose là nó sẽ không chạy thử nghiệm trong các tệp thi hành được. Tôi không chắc chắn lý do tại sao điều đó sẽ tạo sự khác biệt trên Mac/Ubuntu, nhưng nó đáng để quay.

Đảm bảo rằng các tập lệnh không bằng cách nào đó nhận được chmod +x 'trên máy Mac ... Và nếu có, hãy sửa chúng bằng chmod -x $(find tests/ -name '*.py').

+1

Vẫn không hoạt động ... và sự cố xảy ra trên ubuntu, chứ không phải trên mac. –

+1

Mũi không theo mặc định tìm kiếm các thử nghiệm trong các mô-đun thực thi chỉ trên nền tảng cửa sổ ... trên mac/ubuntu anh ta phải sử dụng --không chuyển đổi cho điều đó xảy ra – atlantis

+0

làm việc cho tôi trên windows –

16

Tôi có thể xác nhận rằng như @ david-wolever đã nói, họ không thể có thể thực thi trên Ubuntu. Chạy

nosetests -vv --collect-only 

để xem chi tiết đầy đủ về các tệp được kiểm tra.

36

Tôi đã gặp sự cố tương tự. Các thử nghiệm của tôi chạy tốt trong Windows, nhưng không chạy trong Ubuntu.

Trong Ubuntu, nếu bạn chạy:

nosetests -vv --collect-only 

Có thể bạn sẽ thấy rằng nó bỏ qua tập tin thử nghiệm của bạn vì nó là một thực thi: _Tools/LintControlFiles/test_HgLint.py được thực thi; bỏ qua

Để có được mũi để xem xét thực thi, chạy nó như thế này:

nosetests --exe 
1

Sau khi xem qua nguồn gốc của mũi, đặc biệt là tập tin selector.py, nếu bạn nhìn vào những gì đang xảy ra,

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

Khi kiểm tra nếu chúng ta wantFile, self.matches được gọi, sau đó thực hiện một regex tìm kiếm theo số match, đó là những gì bạn đã vượt qua ở dạng testMatch.

Vấn đề xảy ra khi bạn sau đó kiểm tra sau đó xuống (và, trong suốt tập tin đó),

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152

Nó chạy kiểu rất giống nhau kiểm tra một lần nữa, đối với wantFunction. Điều này có nghĩa, nếu bạn có cấu trúc khác nhau cho gói của bạn, pyfile container của bạn và lớp/chức năng thử nghiệm thực tế của bạn, bạn sẽ phải tạo một regex phức tạp điên rồ để phù hợp với mọi giai đoạn.

Đối với tôi, khi tôi biết điều này, tôi đã chọn đặt tiền tố cho các gói, chức năng vùng chứa và thử nghiệm của mình với một bit chung, tức là

setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...

Và sau đó lệnh nose của tôi làm việc như thế nào,

nose --testMatch="setest"

này sau đó lọc cách tôi mong đợi nó để làm việc.

0

Sử dụng -all-modules và nó sẽ tìm tất cả các thử nghiệm.

nosetests --all-modules ./tests

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