From 5be329909a1cf89c5565a2bd6b6e6cd7a0117ce8 Mon Sep 17 00:00:00 2001 From: Donald Calloway Date: Sat, 4 Oct 2025 11:17:09 -0700 Subject: [PATCH] Adding unit & mock test examples, new tests directory and a snapshot --- .../snapshot-2025-10-04T17_33_25_701Z.md | 212 ++++++++++++++++++ Unit_Test.py | 11 + determinate_test.py | 9 + my_module.py | 9 + test_.py | 7 + tests/area.py | 10 + tests/file_handler.py | 18 ++ tests/test_area.py | 8 + tests/test_file_handler.py | 36 +++ 9 files changed, 320 insertions(+) create mode 100644 .snapshots/snapshot-2025-10-04T17_33_25_701Z.md create mode 100644 Unit_Test.py create mode 100644 determinate_test.py create mode 100644 my_module.py create mode 100644 test_.py create mode 100644 tests/area.py create mode 100644 tests/file_handler.py create mode 100644 tests/test_area.py create mode 100644 tests/test_file_handler.py diff --git a/.snapshots/snapshot-2025-10-04T17_33_25_701Z.md b/.snapshots/snapshot-2025-10-04T17_33_25_701Z.md new file mode 100644 index 0000000..0a4d7c5 --- /dev/null +++ b/.snapshots/snapshot-2025-10-04T17_33_25_701Z.md @@ -0,0 +1,212 @@ +pytest + +# Project Structure + +├─ 📁 code_challenges + └─ CodeChallenge_16.py + └─ CodeChallenge_17.py + └─ CodeChallenge_15.py + └─ CodeChallenge_14.py + └─ CodeChallenge_18.py + └─ CodeChallenge_13.py + └─ CodeChallenge_12.py + └─ CodeChallenge_11.py + └─ CodeChallenge_19.py + └─ CodeChallenge_2.py + └─ CodeChallenge_10.py + └─ CodeChallenge_1.py + └─ CodeChallenge_02(Medium).py + └─ CodeChallenge_20.py + └─ CodeChallenge_4.py + └─ CodeChallenge_39.py + └─ CodeChallenge_38.py + └─ CodeChallenge_37.py + └─ CodeChallenge_36.py + └─ CodeChallenge_35.py + └─ CodeChallenge_34.py + └─ CodeChallenge_33.py + └─ CodeChallenge_32.py + └─ CodeChallenge_31.py + └─ CodeChallenge_30.py + └─ CodeChallenge_3.py + └─ CodeChallenge_29.py + └─ CodeChallenge_28.py + └─ CodeChallenge_27.py + └─ CodeChallenge_26.py + └─ CodeChallenge_25.py + └─ CodeChallenge_24.py + └─ CodeChallenge_23.py + └─ CodeChallenge_22.py + └─ CodeChallenge_21.py + └─ using_zip.py + └─ URLSuffixHash.py + └─ practice_1.py + └─ myCode_2.py + └─ myCode_1.py + └─ cylinder_max.py + └─ Code_Challenge_medium_1.py + └─ CodeChallenge_9.py + └─ CodeChallenge_8.py + └─ CodeChallenge_7.py + └─ CodeChallenge_6.py + └─ CodeChallenge_5.py +└─ class_Pet.py +└─ decorator_chaining.py +└─ decorator_add.py +└─ Context_Managers.py +└─ console_print_with_function.py +└─ concatenating_arrays.py +└─ complex_class.py +└─ flattening_arrays.py +└─ hand_utils.py +└─ Graph_Database_Simulation.py +└─ global_variables.py +└─ Gin_Rummy_Card_Game.py +└─ generators.py +└─ func_calls_func.py +└─ flexible_decorators.py +└─ ExpensiveQuerySimulation.py +└─ enhanced_decorators.py +└─ dynamic_polymorphism.py +└─ high-order_functions.py +└─ Dog.py +└─ discounted_list_prices.py +└─ digital_to_hexidecimal.py +└─ digital_to_binary.py +└─ dict_merge.py +└─ determinate_test.py +└─ determinate3x3.py +└─ determinate2x2.py +└─ items.csv +└─ default_func_parameters.py +└─ decorator_validation.py +└─ decorator_exercise.py +└─ class_user_def_context_mgr.py +└─ class_inheritance.py +└─ classes_fundamentals.py +└─ item_class.py +└─ broadcasting_arrays.py +└─ assigning_values_to_indexed_elements.py +└─ array_statistical_operations.py +└─ array_scalar_operations.py +└─ array_manipulation.py +└─ array_indexing.py +└─ array_creation_functions.py +└─ array_copying.py +└─ array_comparisons.py +└─ array_boolean_indexing.py +└─ args_and_optionals..py +└─ args_and_kargs_in_func.py +└─ animal_talk.py +└─ activations.py +└─ 5-Card_Stud_Poker_Game (Final).py +└─ kargs_in_dynamic_funcs.py +└─ 3D_array_indexing.py +└─ 2D_int_array_indexing.py +└─ 2D_array_slicing.py +└─ 2D_array_indexing.py +└─ 2D_array_boolean_indexing.py +└─ numpy_2D_matrices.py +└─ orbital.py +└─ operator_overloading.py +└─ numpy_linspace_function.py +└─ numpy_array.py +└─ non_local_variables.py +└─ packing-unpacking.txt.py +└─ neural_network_example.py +└─ nested_functions.py +└─ Neo4j_graph_database_simulation.py +└─ my_module.py +└─ MyProductClass.py +└─ MyProductClass Enhanced.py +└─ mult_with_queue.py +└─ mult_with_pool.py +└─ mult_inheritance.py +└─ packing.py +└─ mult_array.py +└─ multi_layer_network.py +└─ multi-layer-perceptron.py +└─ mult.py +└─ mro_resolution_example.py +└─ modify_global_var_in_func.py +└─ modify_data_structure.py +└─ merge_arrays.py +└─ mat_trans.py +└─ mat_flat.py +└─ matrix_transpose.py +└─ matrix_mult.py +└─ matrix_class.py +└─ playing_cards.py +└─ LRUCache.py +└─ Lists_In_Functions.py +└─ linked_list.py +└─ linear_algebra.py +└─ layers.py +└─ lambda_with_lists.py +└─ product_revenues_exercise.py +└─ python_closures.py +└─ product_class.py +└─ pop_list.py +└─ poker_class_version.py +└─ poker.py +└─ lambda_funcs_with_built-ins.py +└─ Lambda_funcs.py +└─ keyword_arguments_in_func_solution.py +└─ keyword_arguments_in_func_exercise.py +└─ keyword_arguments_in_funcs.py +└─ timing_decorator.py +└─ threshold_checker.py +└─ test_digital_to_hexidecimal.py +└─ test_.py +└─ two_numbers_sum_to_9.py +└─ test2.py +└─ test.py +└─ square_matrix_transpose.py +└─ Unit_Test.py +└─ sorting_2d_arrays.py +└─ sorted_arrays.py +└─ slicing_1D_arrays.py +└─ using_eval_function.py +└─ unpacking.py +└─ sleeping_decorator.py +└─ single_node_neural_network.py +└─ runtime_polymorphism.py +└─ RMD_Calculator.py +└─ using_kwargs.py +└─ reshape_array.py +└─ random_arrays_2.py +└─ random_arrays.py +└─ zipping_lists.py +└─ python_decorators.py + + +# Project Files + +- d:\Python_Code\test_.py +- d:\Python_Code\my_module.py + +## d:\Python_Code\test_.py +``` +# test_math.py +def add(a, b): + return a + b + +def test_add(): + assert add(2, 3) == 5 + + +``` + +## d:\Python_Code\my_module.py +``` +# my_module.py +def greet(name): + return f"Hello, {name}!" + +# test_my_module.py +def test_greet(mocker): + mock_greet = mocker.patch('my_module.greet', return_value="Hi!") + assert mock_greet("Alice") == "Hi!" + mock_greet.assert_called_once_with("Alice") +``` + diff --git a/Unit_Test.py b/Unit_Test.py new file mode 100644 index 0000000..9e0bfc3 --- /dev/null +++ b/Unit_Test.py @@ -0,0 +1,11 @@ +import unittest + +def add(a, b): + return a + b + +class TestMath(unittest.TestCase): + def test_add(self): + self.assertEqual(add(2, 4), 6) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/determinate_test.py b/determinate_test.py new file mode 100644 index 0000000..932bb34 --- /dev/null +++ b/determinate_test.py @@ -0,0 +1,9 @@ +import determinate3x3 + +Matrix = [ + [4, 3, 6], + [2, 9, 11], + [1, 4, 8] +] + +print(determinate3x3.det3x3(Matrix)) diff --git a/my_module.py b/my_module.py new file mode 100644 index 0000000..dd5a00b --- /dev/null +++ b/my_module.py @@ -0,0 +1,9 @@ +# my_module.py +def greet(name): + return f"Hello, {name}!" + +# test_my_module.py +def test_greet(mocker): + mock_greet = mocker.patch('my_module.greet', return_value="Hi!") + assert mock_greet("Alice") == "Hi!" + mock_greet.assert_called_once_with("Alice") \ No newline at end of file diff --git a/test_.py b/test_.py new file mode 100644 index 0000000..46dd532 --- /dev/null +++ b/test_.py @@ -0,0 +1,7 @@ +# test_math.py +def add(a, b): + return a + b + +def test_add(): + assert add(2, 3) == 5 + diff --git a/tests/area.py b/tests/area.py new file mode 100644 index 0000000..f54253e --- /dev/null +++ b/tests/area.py @@ -0,0 +1,10 @@ +PI = 3.14159 + + +def area_of_circle(radius: float) -> float: + """ + Function to calculate area of a circle + :param radius: Radius of the circle + :return: Area of the circle + """ + return PI * radius * radius diff --git a/tests/file_handler.py b/tests/file_handler.py new file mode 100644 index 0000000..4775935 --- /dev/null +++ b/tests/file_handler.py @@ -0,0 +1,18 @@ +import os + +def create_file(filename: str) -> None: + """ + Function to create a file + :param filename: Name of the file to create + :return: None + """ + with open(f"{filename}", "w") as f: + f.write("hello") + +def remove_file(filename: str) -> None: + """ + Function to remove a file + :param filename: Name of the file to remove + :return: None + """ + os.remove(filename) diff --git a/tests/test_area.py b/tests/test_area.py new file mode 100644 index 0000000..1cff854 --- /dev/null +++ b/tests/test_area.py @@ -0,0 +1,8 @@ +from tests.area import area_of_circle + + +def test_area_of_circle(): + """ + Function to test area of circle + """ + assert area_of_circle(5) == 78.53975 diff --git a/tests/test_file_handler.py b/tests/test_file_handler.py new file mode 100644 index 0000000..87ac276 --- /dev/null +++ b/tests/test_file_handler.py @@ -0,0 +1,36 @@ +import os +from tests.file_handler import create_file, remove_file + + +def test_create_file(): + """ + Function to test make file + """ + create_file(filename="delete_me.txt") + assert os.path.isfile("delete_me.txt") + +def test_remove_file_with_mock(mocker): + """ + Test the removal of a file using mocking to avoid actual file system operations. + """ + filename = "delete_me.txt" + + # Mock os.remove to test file deletion without deleting anything + mock_remove = mocker.patch("os.remove") + + # Mock os.path.isfile to control its return value + mocker.patch("os.path.isfile", return_value=False) + + # Mock open for the create_file function + mocker.patch("builtins.open", mocker.mock_open()) + + # Simulate file creation and removal + create_file(filename) + remove_file(filename) + + # Assert that os.remove was called correctly + mock_remove.assert_called_once_with(filename) + + # Assert that os.path.isfile returns False, simulating that the file does not exist + assert not os.path.isfile(filename) +