From e2b54dd41d3264d8430cfdffac7d8f3e4739c712 Mon Sep 17 00:00:00 2001 From: mxochicale Date: Fri, 4 Nov 2022 11:04:20 +0000 Subject: [PATCH 1/2] readibility changes to 05Mocks #220 --- ch03tests/05Mocks.ipynb | 380 ++++++++++++++++++++++++++-------------- 1 file changed, 252 insertions(+), 128 deletions(-) diff --git a/ch03tests/05Mocks.ipynb b/ch03tests/05Mocks.ipynb index 2149eec4..3e7eea1c 100644 --- a/ch03tests/05Mocks.ipynb +++ b/ch03tests/05Mocks.ipynb @@ -4,54 +4,75 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Mocking" + "# Mocking in Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Definition\n", + "## What is Mocking? \n", + "A mock object in Python substitutes and imitates a real object within a testing environment. \n", "\n", - "**Mock**: *verb*,\n", + "### Aims of this section\n", + "* To learn fundamentals of unittest.mock\n", + "* To show examples of use cases\n", + "* To test other functions\n", "\n", - "1. to tease or laugh at in a scornful or contemptuous manner\n", - "2. to make a replica or imitation of something\n", - "\n" + "### Real-world examples at UCL \n", + "* https://github.com/SciKit-Surgery/scikit-surgerynditracker/tree/master/tests \n", + "* https://github.com/SciKit-Surgery/scikit-surgerybk/blob/master/tests/test_bk_connection.py \n", + "* https://github.com/lowe-lab-ucl/napari-btrack/blob/main/napari_btrack/_tests/test_dock_widget.py\n", + "\n", + "\n", + "### Further reading \n", + "* C: [CMocka](http://www.cmocka.org/)\n", + "* C++: [googletest](https://github.com/google/googletest)\n", + "* Python: [unittest.mock](http://docs.python.org/3/library/unittest.mock)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Mocking**\n", - "\n", - "- Replace a real object with a pretend object, which records how it is called, and can assert if it is called wrong" + "## 1. The Mock Object\n", + "**1.1 `unittest.mock` offers a base class for mocking objects called Mock.**" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 1, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "### Mocking frameworks\n", - "\n", - "* C: [CMocka](http://www.cmocka.org/)\n", - "* C++: [googletest](https://github.com/google/googletest)\n", - "* Python: [unittest.mock](http://docs.python.org/3/library/unittest.mock)" + "from unittest.mock import Mock\n", + "mock = Mock()\n", + "mock" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Recording calls with mock\n", + "## 2. Recording calls with mock\n", "\n", - "Mock objects record the calls made to them:" + "**2.1 Mock objects record the calls made to them. See example below with various input arguments and its call `function.mock_calls`.**" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -70,18 +91,18 @@ "2" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "function(1)" + "function('word string')" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -90,7 +111,67 @@ "2" ] }, - "execution_count": 3, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function(1000)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function(number_value=500)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function(flag_variable=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -101,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": { "attributes": { "classes": [ @@ -114,10 +195,14 @@ { "data": { "text/plain": [ - "[call(1), call(5, 'hello', a=True)]" + "[call('word string'),\n", + " call(1000),\n", + " call(number_value=500),\n", + " call(flag_variable=False),\n", + " call(5, 'hello', a=True)]" ] }, - "execution_count": 4, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -130,12 +215,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The arguments of each call can be recovered" + "**2.2 The arguments of each call can be recovered**" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": { "attributes": { "classes": [ @@ -146,31 +231,29 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "((5, 'hello'), {'a': True})" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + " , (5, 'hello'), {'a': True}\n" + ] } ], "source": [ - "name, args, kwargs = function.mock_calls[1]\n", - "args, kwargs" + "call_number=4\n", + "name, args, kwargs = function.mock_calls[call_number]\n", + "print(f' {name}, {args}, {kwargs}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Mock objects can return different values for each call" + "**2.3 Mock objects can return different values for each call**" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -179,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -188,18 +271,18 @@ "2" ] }, - "execution_count": 7, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "function(1)" + "function('word string')" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -208,25 +291,18 @@ "'xyz'" ] }, - "execution_count": 8, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "function(1, \"hello\", {'a': True})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We expect an error if there are no return values left in the list:" + "function(1000)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -236,57 +312,72 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/Documents/.config/packman/miniconda3/envs/teaching/lib/python3.7/unittest/mock.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(_mock_self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 958\u001b[0m \u001b[0;31m# in the signature\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 959\u001b[0m \u001b[0m_mock_self\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mock_check_sig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 960\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_mock_self\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mock_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 961\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 962\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Documents/.config/packman/miniconda3/envs/teaching/lib/python3.7/unittest/mock.py\u001b[0m in \u001b[0;36m_mock_call\u001b[0;34m(_mock_self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1020\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0meffect\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1021\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0m_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meffect\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1022\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meffect\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1023\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_is_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1024\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhello\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43ma\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1104\u001b[0m, in \u001b[0;36mCallableMixin.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1102\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mock_check_sig(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1103\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_increment_mock_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1104\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1108\u001b[0m, in \u001b[0;36mCallableMixin._mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_mock_call\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 1108\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1165\u001b[0m, in \u001b[0;36mCallableMixin._execute_mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m effect\n\u001b[1;32m 1164\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _callable(effect):\n\u001b[0;32m-> 1165\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43meffect\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _is_exception(result):\n\u001b[1;32m 1167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m result\n", "\u001b[0;31mStopIteration\u001b[0m: " ] } ], "source": [ - "function()" + "function(1000, \"hello\", {'a': True})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Using mocks to model test resources" + "**2.4 We expect an error if there are no return values left in the list**" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 14, "metadata": {}, + "outputs": [ + { + "ename": "StopIteration", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [14]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1104\u001b[0m, in \u001b[0;36mCallableMixin.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1102\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mock_check_sig(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1103\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_increment_mock_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1104\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1108\u001b[0m, in \u001b[0;36mCallableMixin._mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_mock_call\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 1108\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1165\u001b[0m, in \u001b[0;36mCallableMixin._execute_mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m effect\n\u001b[1;32m 1164\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _callable(effect):\n\u001b[0;32m-> 1165\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43meffect\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _is_exception(result):\n\u001b[1;32m 1167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m result\n", + "\u001b[0;31mStopIteration\u001b[0m: " + ] + } + ], "source": [ - "Often we want to write tests for code which interacts with remote resources. (E.g. databases, the internet, or data files.)" + "function()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We don't want to have our tests *actually* interact with the remote resource, as this would mean our tests failed\n", - "due to lost internet connections, for example." + "## 3. Examples " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "### 3.1 Using mocks to model test resources\n", + "Often we want to write tests for code which interacts with remote resources. (E.g. databases, the internet, or data files.)\n", + "We don't want to have our tests *actually* interact with the remote resource, as this would mean our tests failed\n", + "due to lost internet connections, for example.\n", "Instead, we can use mocks to assert that our code does the right thing in terms of the *messages it sends*: the parameters of the\n", - "function calls it makes to the remote resource." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For example, consider the following code that downloads a map from the internet:" + "function calls it makes to the remote resource.\n", + "For example, consider the following code that downloads a map from the internet:\n" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -313,32 +404,25 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "london_map = map_at(51.5073509, -0.1277583)\n", - "from IPython.display import Image" - ] - }, - { - "cell_type": "code", - "execution_count": 12, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] }, - "execution_count": 12, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "london_map = map_at(51.5073509, -0.1277583)\n", + "from IPython.display import Image\n", + "\n", "%matplotlib inline\n", "Image(london_map.content)" ] @@ -352,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -367,7 +451,8 @@ "from unittest.mock import patch\n", "with patch.object(requests,'get') as mock_get:\n", " london_map = map_at(51.5073509, -0.1277583)\n", - " print(mock_get.mock_calls)" + " \n", + "print(mock_get.mock_calls)" ] }, { @@ -379,46 +464,93 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "def test_build_default_params():\n", + "good_params={\n", + " 'z':12,\n", + " 'size':'400,400',\n", + " 'll':'0.0,51.0',\n", + " 'lang':'en_US',\n", + " 'l': 'map'\n", + "}\n", + "\n", + "\n", + "def test_build_default_params(_params):\n", " with patch.object(requests,'get') as mock_get:\n", " default_map = map_at(51.0, 0.0)\n", " mock_get.assert_called_with(\n", " \"https://static-maps.yandex.ru/1.x/?\",\n", - " params={\n", - " 'z':12,\n", - " 'size':'400,400',\n", - " 'll':'0.0,51.0',\n", - " 'lang':'en_US',\n", - " 'l': 'map'\n", - " }\n", + " params=_params\n", " )\n", - "test_build_default_params()" + " \n", + "test_build_default_params(good_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That was quiet, so it passed. When I'm writing tests, I usually modify one of the expectations, to something 'wrong', just to check it's not\n", - "passing \"by accident\", run the tests, then change it back!" + "That was quiet, so it passed. \n", + "When writing tests, one usually modifies one of the expectations, to something 'wrong', just to check it's not\n", + "passing \"by accident\", run the tests, then change it back:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "ename": "AssertionError", + "evalue": "expected call not found.\nExpected: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})\nActual: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'size': '400,400', 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 11\u001b[0m default_map \u001b[38;5;241m=\u001b[39m map_at(\u001b[38;5;241m51.0\u001b[39m, \u001b[38;5;241m0.0\u001b[39m)\n\u001b[1;32m 12\u001b[0m mock_get\u001b[38;5;241m.\u001b[39massert_called_with(\n\u001b[1;32m 13\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://static-maps.yandex.ru/1.x/?\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 14\u001b[0m params\u001b[38;5;241m=\u001b[39m_params\n\u001b[1;32m 15\u001b[0m )\n\u001b[0;32m---> 17\u001b[0m \u001b[43mtest_build_default_params\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbad_params\u001b[49m\u001b[43m)\u001b[49m\n", + "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36mtest_build_default_params\u001b[0;34m(_params)\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m patch\u001b[38;5;241m.\u001b[39mobject(requests,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mget\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m mock_get:\n\u001b[1;32m 11\u001b[0m default_map \u001b[38;5;241m=\u001b[39m map_at(\u001b[38;5;241m51.0\u001b[39m, \u001b[38;5;241m0.0\u001b[39m)\n\u001b[0;32m---> 12\u001b[0m \u001b[43mmock_get\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43massert_called_with\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhttps://static-maps.yandex.ru/1.x/?\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_params\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:919\u001b[0m, in \u001b[0;36mNonCallableMock.assert_called_with\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 917\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m actual \u001b[38;5;241m!=\u001b[39m expected:\n\u001b[1;32m 918\u001b[0m cause \u001b[38;5;241m=\u001b[39m expected \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(expected, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 919\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAssertionError\u001b[39;00m(_error_message()) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcause\u001b[39;00m\n", + "\u001b[0;31mAssertionError\u001b[0m: expected call not found.\nExpected: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})\nActual: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'size': '400,400', 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})" + ] + } + ], + "source": [ + "bad_params={\n", + " 'z':12,\n", + " \n", + " 'll':'0.0,51.0',\n", + " 'lang':'en_US',\n", + " 'l': 'map'\n", + "}\n", + "\n", + "def test_build_default_params(_params):\n", + " with patch.object(requests,'get') as mock_get:\n", + " default_map = map_at(51.0, 0.0)\n", + " mock_get.assert_called_with(\n", + " \"https://static-maps.yandex.ru/1.x/?\",\n", + " params=_params\n", + " )\n", + " \n", + "test_build_default_params(bad_params)\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Testing functions that call other functions\n", + "### 3.2 Testing functions that call other functions\n", "\n", - "
" + " \n", + "We want to test that `partial_derivative function` does the right thing. \n", + "It is supposed to compute the derivative of a function of a vector in a particular direction. " ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": { "attributes": { "classes": [ @@ -437,24 +569,9 @@ " return (f_x_plus_delta - f_x) / delta" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We want to test that the above function does the right thing. It is supposed to compute the derivative of a function\n", - "of a vector in a particular direction." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "E.g.:" - ] - }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -463,7 +580,7 @@ "1.0" ] }, - "execution_count": 16, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -481,7 +598,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -501,21 +618,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We made our mock a \"Magic Mock\" because otherwise, the mock results `f_x_plus_delta` and `f_x` can't be subtracted:" + "We made our mock a `MagicMock` object because otherwise, the mock results `f_x_plus_delta` and `f_x` can't be subtracted:" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -526,7 +643,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -536,7 +653,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mMock\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mMock\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "Input \u001b[0;32mIn [24]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mMock\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mMock\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'Mock' and 'Mock'" ] } @@ -544,6 +661,13 @@ "source": [ "Mock() - Mock()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -551,7 +675,7 @@ "display_name": "Mocks" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -565,7 +689,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.6" } }, "nbformat": 4, From f9dc98d8aa8db0bc94194606b8220105dc2c4ae9 Mon Sep 17 00:00:00 2001 From: mxochicale Date: Fri, 4 Nov 2022 17:43:46 +0000 Subject: [PATCH 2/2] addresses @dpshelio comments (#220) --- ch03tests/05Mocks.ipynb | 445 +++++++++++----------------------------- 1 file changed, 117 insertions(+), 328 deletions(-) diff --git a/ch03tests/05Mocks.ipynb b/ch03tests/05Mocks.ipynb index 3e7eea1c..9e126182 100644 --- a/ch03tests/05Mocks.ipynb +++ b/ch03tests/05Mocks.ipynb @@ -12,51 +12,42 @@ "metadata": {}, "source": [ "## What is Mocking? \n", + "\n", + "Definition \n", + "**Mock**: _verb_,\n", + "1. to tease or laugh at in a scornful or contemptuous manner\n", + "2. to make a replica or imitation of something\n", + "\n", + "**Mocking in Python** \n", "A mock object in Python substitutes and imitates a real object within a testing environment. \n", "\n", - "### Aims of this section\n", + "\n", + "## Aims\n", "* To learn fundamentals of unittest.mock\n", "* To show examples of use cases\n", "* To test other functions\n", "\n", - "### Real-world examples at UCL \n", - "* https://github.com/SciKit-Surgery/scikit-surgerynditracker/tree/master/tests \n", - "* https://github.com/SciKit-Surgery/scikit-surgerybk/blob/master/tests/test_bk_connection.py \n", - "* https://github.com/lowe-lab-ucl/napari-btrack/blob/main/napari_btrack/_tests/test_dock_widget.py\n", - "\n", - "\n", - "### Further reading \n", - "* C: [CMocka](http://www.cmocka.org/)\n", - "* C++: [googletest](https://github.com/google/googletest)\n", - "* Python: [unittest.mock](http://docs.python.org/3/library/unittest.mock)" + "## Further reading\n", + "See last cell for further reading and real-word examples at UCL\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. The Mock Object\n", - "**1.1 `unittest.mock` offers a base class for mocking objects called Mock.**" + "## The Mock Object\n", + "`unittest.mock` offers a base class for mocking objects called Mock. The following is an example how to define and object, call it and return id.\n" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from unittest.mock import Mock\n", + "from unittest.mock import patch\n", + "\n", "mock = Mock()\n", "mock" ] @@ -65,14 +56,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. Recording calls with mock\n", - "\n", - "**2.1 Mock objects record the calls made to them. See example below with various input arguments and its call `function.mock_calls`.**" + "## Recording calls with mock\n", + "Mock objects record the calls made to them. See example below with various input arguments and its call `function.mock_calls`." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -82,107 +72,52 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function('word string')" ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function(1000)" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function(number_value=500)" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function(flag_variable=False)" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function(5, \"hello\", a=True)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "attributes": { "classes": [ @@ -191,22 +126,7 @@ "id": "" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "[call('word string'),\n", - " call(1000),\n", - " call(number_value=500),\n", - " call(flag_variable=False),\n", - " call(5, 'hello', a=True)]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function.mock_calls" ] @@ -215,12 +135,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**2.2 The arguments of each call can be recovered**" + "The arguments of each call can be recovered" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "attributes": { "classes": [ @@ -229,31 +149,23 @@ "id": "" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " , (5, 'hello'), {'a': True}\n" - ] - } - ], + "outputs": [], "source": [ - "call_number=4\n", - "name, args, kwargs = function.mock_calls[call_number]\n", - "print(f' {name}, {args}, {kwargs}')" + "call_number = 4\n", + "_, args, kwargs = function.mock_calls[call_number]\n", + "print(f' {args}, {kwargs}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**2.3 Mock objects can return different values for each call**" + "## Mock objects can return different values for each call" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -262,64 +174,18 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function('word string')" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'xyz'" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function(1000)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "ename": "StopIteration", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [13]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhello\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43ma\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1104\u001b[0m, in \u001b[0;36mCallableMixin.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1102\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mock_check_sig(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1103\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_increment_mock_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1104\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1108\u001b[0m, in \u001b[0;36mCallableMixin._mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_mock_call\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 1108\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1165\u001b[0m, in \u001b[0;36mCallableMixin._execute_mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m effect\n\u001b[1;32m 1164\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _callable(effect):\n\u001b[0;32m-> 1165\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43meffect\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _is_exception(result):\n\u001b[1;32m 1167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m result\n", - "\u001b[0;31mStopIteration\u001b[0m: " - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function(1000, \"hello\", {'a': True})" ] @@ -328,29 +194,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**2.4 We expect an error if there are no return values left in the list**" + "We expect an error if there are no return values left in the list" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "ename": "StopIteration", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [14]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1104\u001b[0m, in \u001b[0;36mCallableMixin.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1102\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mock_check_sig(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1103\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_increment_mock_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m-> 1104\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1108\u001b[0m, in \u001b[0;36mCallableMixin._mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1107\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_mock_call\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 1108\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_mock_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:1165\u001b[0m, in \u001b[0;36mCallableMixin._execute_mock_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m effect\n\u001b[1;32m 1164\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _callable(effect):\n\u001b[0;32m-> 1165\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43meffect\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _is_exception(result):\n\u001b[1;32m 1167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m result\n", - "\u001b[0;31mStopIteration\u001b[0m: " - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "function()" ] @@ -359,14 +210,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 3. Examples " + "## Examples " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 3.1 Using mocks to model test resources\n", + "### Using mocks to model test resources\n", "Often we want to write tests for code which interacts with remote resources. (E.g. databases, the internet, or data files.)\n", "We don't want to have our tests *actually* interact with the remote resource, as this would mean our tests failed\n", "due to lost internet connections, for example.\n", @@ -377,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -404,21 +255,9 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "london_map = map_at(51.5073509, -0.1277583)\n", "from IPython.display import Image\n", @@ -436,19 +275,10 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[call('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'size': '400,400', 'll': '-0.1277583,51.5073509', 'lang': 'en_US', 'l': 'map'})]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "from unittest.mock import patch\n", "with patch.object(requests,'get') as mock_get:\n", " london_map = map_at(51.5073509, -0.1277583)\n", " \n", @@ -464,28 +294,24 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "def test_build_default_params(_base, _params):\n", + " with patch.object(requests,'get') as mock_get:\n", + " default_map = map_at(51.0, 0.0)\n", + " mock_get.assert_called_with(_base, params=_params)\n", + "\n", + "base=\"https://static-maps.yandex.ru/1.x/?\"\n", "good_params={\n", " 'z':12,\n", " 'size':'400,400',\n", " 'll':'0.0,51.0',\n", " 'lang':'en_US',\n", " 'l': 'map'\n", - "}\n", - "\n", - "\n", - "def test_build_default_params(_params):\n", - " with patch.object(requests,'get') as mock_get:\n", - " default_map = map_at(51.0, 0.0)\n", - " mock_get.assert_called_with(\n", - " \"https://static-maps.yandex.ru/1.x/?\",\n", - " params=_params\n", - " )\n", - " \n", - "test_build_default_params(good_params)" + "} \n", + "test_build_default_params(base, good_params)" ] }, { @@ -493,64 +319,39 @@ "metadata": {}, "source": [ "That was quiet, so it passed. \n", - "When writing tests, one usually modifies one of the expectations, to something 'wrong', just to check it's not\n", + "When writing tests, we usually modifies one of the expectations, to something 'wrong', just to check it's not\n", "passing \"by accident\", run the tests, then change it back:" ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "ename": "AssertionError", - "evalue": "expected call not found.\nExpected: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})\nActual: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'size': '400,400', 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 11\u001b[0m default_map \u001b[38;5;241m=\u001b[39m map_at(\u001b[38;5;241m51.0\u001b[39m, \u001b[38;5;241m0.0\u001b[39m)\n\u001b[1;32m 12\u001b[0m mock_get\u001b[38;5;241m.\u001b[39massert_called_with(\n\u001b[1;32m 13\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://static-maps.yandex.ru/1.x/?\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 14\u001b[0m params\u001b[38;5;241m=\u001b[39m_params\n\u001b[1;32m 15\u001b[0m )\n\u001b[0;32m---> 17\u001b[0m \u001b[43mtest_build_default_params\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbad_params\u001b[49m\u001b[43m)\u001b[49m\n", - "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36mtest_build_default_params\u001b[0;34m(_params)\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m patch\u001b[38;5;241m.\u001b[39mobject(requests,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mget\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m mock_get:\n\u001b[1;32m 11\u001b[0m default_map \u001b[38;5;241m=\u001b[39m map_at(\u001b[38;5;241m51.0\u001b[39m, \u001b[38;5;241m0.0\u001b[39m)\n\u001b[0;32m---> 12\u001b[0m \u001b[43mmock_get\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43massert_called_with\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhttps://static-maps.yandex.ru/1.x/?\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_params\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/anaconda3/envs/simpleVE/lib/python3.10/unittest/mock.py:919\u001b[0m, in \u001b[0;36mNonCallableMock.assert_called_with\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 917\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m actual \u001b[38;5;241m!=\u001b[39m expected:\n\u001b[1;32m 918\u001b[0m cause \u001b[38;5;241m=\u001b[39m expected \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(expected, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 919\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAssertionError\u001b[39;00m(_error_message()) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcause\u001b[39;00m\n", - "\u001b[0;31mAssertionError\u001b[0m: expected call not found.\nExpected: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})\nActual: get('https://static-maps.yandex.ru/1.x/?', params={'z': 12, 'size': '400,400', 'll': '0.0,51.0', 'lang': 'en_US', 'l': 'map'})" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ + "base=\"https://static-maps.yandex.ru/1.x/?\"\n", "bad_params={\n", - " 'z':12,\n", - " \n", + " 'z':15,\n", + " 'size':'400,400', \n", " 'll':'0.0,51.0',\n", " 'lang':'en_US',\n", " 'l': 'map'\n", - "}\n", - "\n", - "def test_build_default_params(_params):\n", - " with patch.object(requests,'get') as mock_get:\n", - " default_map = map_at(51.0, 0.0)\n", - " mock_get.assert_called_with(\n", - " \"https://static-maps.yandex.ru/1.x/?\",\n", - " params=_params\n", - " )\n", - " \n", - "test_build_default_params(bad_params)\n", - "\n" + "} \n", + "test_build_default_params(base, bad_params)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 3.2 Testing functions that call other functions\n", - "\n", - " \n", + "### Testing functions that call other functions\n", "We want to test that `partial_derivative function` does the right thing. \n", "It is supposed to compute the derivative of a function of a vector in a particular direction. " ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "attributes": { "classes": [ @@ -571,20 +372,9 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "partial_derivative(sum, [0,0,0], 1)" ] @@ -598,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -623,45 +413,44 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "MagicMock() - MagicMock()" ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "unsupported operand type(s) for -: 'Mock' and 'Mock'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [24]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mMock\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mMock\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'Mock' and 'Mock'" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "Mock() - Mock()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Further reading\n", + "\n", + "## Real-world examples at UCL \n", + "* Mock tests for NDI Optical trackers: https://github.com/SciKit-Surgery/scikit-surgerynditracker/tree/master/tests \n", + "* Mock tests for BK ultrasound machines: https://github.com/SciKit-Surgery/scikit-surgerybk/tree/master/tests\n", + "* Mock tests for Image Viewer Datasets: https://github.com/lowe-lab-ucl/napari-btrack/blob/main/napari_btrack/_tests/test_dock_widget.py\n", + "\n", + "\n", + "## Frameworks\n", + "* C: [CMocka](http://www.cmocka.org/)\n", + "* C++: [googletest](https://github.com/google/googletest)\n", + "* Python: [unittest.mock](http://docs.python.org/3/library/unittest.mock)\n", + "\n", + "## Other tutorials\n", + "* Understanding the Python Mock Object Library: https://realpython.com/python-mock-library/\n", + "* Intro to mocking in python: https://www.toptal.com/python/an-introduction-to-mocking-in-python\n" + ] + }, { "cell_type": "code", "execution_count": null,