2012-01-25 65 views
6

Tôi đang sử dụng unittest Python với mã đơn giản như vậy:Làm thế nào tôi có thể trích xuất một danh sách các TestCases từ một TestSuite?

suite = unittest.TestSuite() 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module1)) 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module2)) 

Tuy nhiên, tôi muốn làm một số điều chỉnh để mỗi bài kiểm tra sau khi họ đã được thu thập bởi các bộ. Tôi nghĩ tôi có thể làm một cái gì đó như thế này để lặp qua các trường hợp thử nghiệm trong bộ:

print suite.countTestCases() 
for test in suite:    # Also tried with suite.__iter__() 
    # Do something with test 
    print test.__class__ 

Tuy nhiên, cho bao nhiêu trường hợp thử nghiệm như tôi tải, nó chỉ từng in

3 
<class 'unittest.suite.TestSuite'> 

Có cách nào Tôi có thể nhận được tất cả các đối tượng của lớp TestCase từ bộ phần mềm? Có cách nào khác tôi nên tải trường hợp thử nghiệm để tạo điều kiện này?

Trả lời

5

Hãy thử

for test in suite: 
    print test._tests 
+1

Ok, tôi nghĩ đó là những gì tôi muốn. Tôi nhận thấy _tests, nhưng tôi đã cố gắng gọi nó là 'print suite._tests'. Tôi đoán tôi sẽ chỉ viết nó cho tôi là một noob tại Python. – denaje

+0

Tôi sắp sửa, nhưng dường như bạn phải đợi 10 phút trước khi chấp nhận. Cảm ơn nhiều! – denaje

1

tôi sử dụng chức năng này như một số các yếu tố trong suite._tests là dãy phòng mình:

def list_of_tests_gen(s): 
    """ a generator of tests from a suite 

    """ 
    for test in s: 
    if unittest.suite._isnotsuite(test): 
     yield test 
    else: 
     for t in list_of_tests_gen(test): 
     yield t 
0

Một cách gọn gàng để nhận danh sách các bài kiểm tra là sử dụng nose2 thu thập cắm vào.

$ nose2 -s <testdir> -v --plugin nose2.plugins.collect --collect-only 
test_1 (test_test.TestClass1) 
Test Desc 1 ... ok 
test_2 (test_test.TestClass1) 
Test Desc 2 ... ok 
test_3 (test_test.TestClass1) 
Test Desc 3 ... ok 
test_2_1 (test_test.TestClass2) 
Test Desc 2_1 ... ok 
test_2_2 (test_test.TestClass2) 
Test Desc 2_2 ... ok 

---------------------------------------------------------------------- 
Ran 5 tests in 0.001s 

OK 

Nó không thực sự chạy thử nghiệm.

Bạn có thể cài đặt nose2 (và đó là plugin) như thế này:

$ pip install nose2 

Và dĩ nhiên bạn có thể sử dụng nose2 để chạy thử nghiệm đơn vị ví dụ như thế này hoặc điều này:

# run tests from testfile.py 
$ nose2 -v -s . testfile 

# generate junit xml results: 
$ nose2 -v --plugin nose2.plugins.junitxml -X testfile --junit-xml 
$ mv nose2-junit.xml results_testfile.xml 
Các vấn đề liên quan