Làm cách nào để chạy nhiều lớp trong một bộ thử nghiệm duy nhất trong Python bằng cách sử dụng thử nghiệm đơn vị?
user5305519
2.8004 huy hiệu vàng27 Huy hiệu bạc42 Huy hiệu đồng4 gold badges27 silver badges42 bronze badges
hỏi ngày 19 tháng 3 năm 2011 lúc 7:40Mar 19, 2011 at 7:40
1
Nếu bạn muốn chạy tất cả các bài kiểm tra từ một danh sách cụ thể các lớp kiểm tra, thay vì tất cả các bài kiểm tra từ tất cả các lớp kiểm tra trong một mô -đun, bạn có thể sử dụng phương pháp loadTestsFromTestCase
của ____ 7 để nhận TestSuite
các bài kiểm tra cho mỗi lớp, Và sau đó tạo một TestSuite
kết hợp từ một danh sách chứa tất cả các bộ mà bạn có thể sử dụng với
import unittest
class TestSomeClass[unittest.TestCase]:
def testStuff[self]:
# your testcode here
pass
class TestSomeOtherClass[unittest.TestCase]:
def testOtherStuff[self]:
# testcode of second class here
pass
if __name__ == '__main__':
unittest.main[]
1:import unittest
# Some tests
class TestClassA[unittest.TestCase]:
def testOne[self]:
# test code
pass
class TestClassB[unittest.TestCase]:
def testOne[self]:
# test code
pass
class TestClassC[unittest.TestCase]:
def testOne[self]:
# test code
pass
def run_some_tests[]:
# Run only the tests in the specified classes
test_classes_to_run = [TestClassA, TestClassC]
loader = unittest.TestLoader[]
suites_list = []
for test_class in test_classes_to_run:
suite = loader.loadTestsFromTestCase[test_class]
suites_list.append[suite]
big_suite = unittest.TestSuite[suites_list]
runner = unittest.TextTestRunner[]
results = runner.run[big_suite]
# ...
if __name__ == '__main__':
run_some_tests[]
Đã trả lời ngày 29 tháng 5 năm 2013 lúc 21:11May 29, 2013 at 21:11
rakslicerakslicerakslice
8,5343 huy hiệu vàng52 Huy hiệu bạc54 Huy hiệu đồng3 gold badges52 silver badges54 bronze badges
2
Tôi hơi không chắc chắn về những gì bạn đang yêu cầu ở đây, nhưng nếu bạn muốn biết cách kiểm tra nhiều lớp trong cùng một bộ, thông thường bạn chỉ cần tạo nhiều mẫu thử trong cùng một tệp python và chạy chúng lại với nhau:
import unittest
class TestSomeClass[unittest.TestCase]:
def testStuff[self]:
# your testcode here
pass
class TestSomeOtherClass[unittest.TestCase]:
def testOtherStuff[self]:
# testcode of second class here
pass
if __name__ == '__main__':
unittest.main[]
Và chạy với ví dụ:
python mytestsuite.py
Các ví dụ tốt hơn có thể được tìm thấy trong tài liệu chính thức.
Mặt khác, nếu bạn muốn chạy nhiều tệp kiểm tra, như đã nêu chi tiết trong "Cách tổ chức kiểm tra Python theo cách mà tôi có thể chạy tất cả các thử nghiệm trong một lệnh duy nhất?", Vậy thì câu trả lời khác có thể tốt hơn.
Đã trả lời ngày 28 tháng 4 năm 2011 lúc 17:24Apr 28, 2011 at 17:24
TddryingTddryingtddtrying
8606 Huy hiệu bạc12 Huy hiệu Đồng6 silver badges12 bronze badges
Phương thức unittest.testloader.loadTestSfRode [] sẽ khám phá và tải tất cả các lớp trong mô -đun được chỉ định. Vì vậy, bạn chỉ có thể làm điều này:
import unittest
import sys
class T1[unittest.TestCase]:
def test_A[self]:
pass
def test_B[self]:
pass
class T2[unittest.TestCase]:
def test_A[self]:
pass
def test_B[self]:
pass
if __name__ == "__main__":
suite = unittest.TestLoader[].loadTestsFromModule[ sys.modules[__name__] ]
unittest.TextTestRunner[verbosity=3].run[ suite ]
Đã trả lời ngày 27 tháng 4 năm 2017 lúc 11:30Apr 27, 2017 at 11:30
PDSPDSpds
2.0821 Huy hiệu vàng19 Huy hiệu bạc18 Huy hiệu đồng1 gold badge19 silver badges18 bronze badges
Thông thường bạn sẽ làm theo cách sau [chỉ thêm một lớp cho mỗi bộ]:
# Add tests.
alltests = unittest.TestSuite[]
alltests.addTest[unittest.makeSuite[Test1]]
alltests.addTest[unittest.makeSuite[Test2]]
Nếu bạn muốn có nhiều lớp mỗi bộ, bạn có thể sử dụng thêm các bài kiểm tra này theo cách sau:
for name in testnames:
suite.addTest[tc_class[name, cargs=args]]
Dưới đây là ví dụ tương tự để chạy tất cả các lớp trên mỗi bộ riêng biệt, bạn có thể xác định phương thức
import unittest
class TestSomeClass[unittest.TestCase]:
def testStuff[self]:
# your testcode here
pass
class TestSomeOtherClass[unittest.TestCase]:
def testOtherStuff[self]:
# testcode of second class here
pass
if __name__ == '__main__':
unittest.main[]
2 của riêng bạn:# Credits: //codereview.stackexchange.com/a/88662/15346
def make_suite[tc_class]:
testloader = unittest.TestLoader[]
testnames = testloader.getTestCaseNames[tc_class]
suite = unittest.TestSuite[]
for name in testnames:
suite.addTest[tc_class[name, cargs=args]]
return suite
# Add all tests.
alltests = unittest.TestSuite[]
for name, obj in inspect.getmembers[sys.modules[__name__]]:
if inspect.isclass[obj] and name.startswith["FooTest"]:
alltests.addTest[make_suite[obj]]
result = unittest.TextTestRunner[verbosity=2].run[alltests]
Nếu ở trên không SUITE, bạn có thể chuyển đổi ví dụ trên thành phương thức có thể chấp nhận nhiều lớp.
Đã trả lời ngày 12 tháng 5 năm 2015 lúc 10:12May 12, 2015 at 10:12
Kenorbkenorbkenorb
Phù bằng vàng 146K7676 gold badges658 silver badges715 bronze badges
Tôi đã tìm thấy mũi là một công cụ tốt cho việc này. Nó phát hiện ra tất cả các bài kiểm tra đơn vị trong cấu trúc thư mục và thực thi chúng.
Đã trả lời ngày 19 tháng 3 năm 2011 lúc 8:18Mar 19, 2011 at 8:18
0