@ ইয়ার্কি দ্বারা অনুপ্রাণিত হয়ে আমি ইতিমধ্যে পেয়েছি এমন কয়েকটি কোডের সাথে এটি সংযুক্ত করেছি। run_unit_tests()
কমান্ড লাইনটি ব্যবহার না করেই ফাংশনটিতে কল করে আপনি অন্য স্ক্রিপ্ট থেকে এটি কল করতে পারেন, বা কেবল কমান্ড লাইন থেকে এটি কল করতে পারেন python3 my_test_file.py
।
import my_test_file
my_test_file.run_unit_tests()
দু: খজনকভাবে এটি কেবল তার জন্য Python 3.3
বা তার চেয়েও ভাল কাজ করে:
import unittest
class LineBalancingUnitTests(unittest.TestCase):
@classmethod
def setUp(self):
self.maxDiff = None
def test_it_is_sunny(self):
self.assertTrue("a" == "a")
def test_it_is_hot(self):
self.assertTrue("a" != "b")
রানার কোড:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import unittest
from .somewhere import LineBalancingUnitTests
def create_suite(classes, unit_tests_to_run):
suite = unittest.TestSuite()
unit_tests_to_run_count = len( unit_tests_to_run )
for _class in classes:
_object = _class()
for function_name in dir( _object ):
if function_name.lower().startswith( "test" ):
if unit_tests_to_run_count > 0 \
and function_name not in unit_tests_to_run:
continue
suite.addTest( _class( function_name ) )
return suite
def run_unit_tests():
runner = unittest.TextTestRunner()
classes = [
LineBalancingUnitTests,
]
# Comment all the tests names on this list, to run all Unit Tests
unit_tests_to_run = [
"test_it_is_sunny",
# "test_it_is_hot",
]
runner.run( create_suite( classes, unit_tests_to_run ) )
if __name__ == "__main__":
print( "\n\n" )
run_unit_tests()
কোডটি কিছুটা সম্পাদনা করে, আপনি কল করতে চান এমন সমস্ত ইউনিট পরীক্ষা দিয়ে একটি অ্যারে পাস করতে পারেন:
...
def run_unit_tests(unit_tests_to_run):
runner = unittest.TextTestRunner()
classes = \
[
LineBalancingUnitTests,
]
runner.run( suite( classes, unit_tests_to_run ) )
...
এবং অন্য ফাইল:
import my_test_file
# Comment all the tests names on this list, to run all Unit Tests
unit_tests_to_run = \
[
"test_it_is_sunny",
# "test_it_is_hot",
]
my_test_file.run_unit_tests( unit_tests_to_run )
বিকল্পভাবে, আপনি https://docs.python.org/3/library/unittest.html#load-tests-protocol ব্যবহার করতে পারেন এবং আপনার পরীক্ষার মডিউল / ফাইলটিতে নিম্নলিখিত পদ্ধতিটি সংজ্ঞায়িত করতে পারেন :
def load_tests(loader, standard_tests, pattern):
suite = unittest.TestSuite()
# To add a single test from this file
suite.addTest( LineBalancingUnitTests( 'test_it_is_sunny' ) )
# To add a single test class from this file
suite.addTests( unittest.TestLoader().loadTestsFromTestCase( LineBalancingUnitTests ) )
return suite
আপনি যদি একক পরীক্ষার ফাইলে মৃত্যুদন্ড কার্যকর করতে চান, তবে কেবলমাত্র load_tests()
ফাংশনটি সংজ্ঞায়িত করার জন্য আপনাকে কেবলমাত্র অনুসন্ধান আবিষ্কারের ধরণটি সেট করতে হবে।
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import unittest
test_pattern = 'mytest/module/name.py'
PACKAGE_ROOT_DIRECTORY = os.path.dirname( os.path.realpath( __file__ ) )
loader = unittest.TestLoader()
start_dir = os.path.join( PACKAGE_ROOT_DIRECTORY, 'testing' )
suite = loader.discover( start_dir, test_pattern )
runner = unittest.TextTestRunner( verbosity=2 )
results = runner.run( suite )
print( "results: %s" % results )
print( "results.wasSuccessful: %s" % results.wasSuccessful() )
sys.exit( not results.wasSuccessful() )
তথ্যসূত্র:
- ইউনিটেটেস্ট মডিউল যখন কোনও স্ক্রিপ্টে থাকে তখন sys.argv [1] এর সাথে সমস্যা
- পাইথন ক্লাসে সমস্ত ক্রিয়াকলাপ চালিয়ে যাওয়ার এবং কার্যকর করার কোনও উপায় আছে কি?
- পাইথনের একটি শ্রেণীর সমস্ত সদস্য ভেরিয়েবলের উপর লুপিং
সর্বশেষ মূল প্রোগ্রামটির বিকল্প হিসাবে, unittest.main()
পদ্ধতিটি প্রয়োগের পরে আমি নিম্নলিখিত পরিবর্তনের সাথে উপস্থিত হয়েছি :
- https://github.com/python/cpython/blob/master/Lib/unittest/main.py#L65
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import unittest
PACKAGE_ROOT_DIRECTORY = os.path.dirname( os.path.realpath( __file__ ) )
start_dir = os.path.join( PACKAGE_ROOT_DIRECTORY, 'testing' )
from testing_package import main_unit_tests_module
testNames = ["TestCaseClassName.test_nameHelloWorld"]
loader = unittest.TestLoader()
suite = loader.loadTestsFromNames( testNames, main_unit_tests_module )
runner = unittest.TextTestRunner(verbosity=2)
results = runner.run( suite )
print( "results: %s" % results )
print( "results.wasSuccessful: %s" % results.wasSuccessful() )
sys.exit( not results.wasSuccessful() )