From eb452c73457f00a5ca0aca87330fb8d4f35b2c61 Mon Sep 17 00:00:00 2001 From: Maximos Nikiforakis Date: Fri, 9 Feb 2024 20:23:08 +0200 Subject: [PATCH] Add cachedResult method to TestCase --- src/unittest_extensions/case.py | 11 ++++++++++- src/unittest_extensions/tests/test_use_case.py | 12 ++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/unittest_extensions/case.py b/src/unittest_extensions/case.py index 56732b6..082377b 100644 --- a/src/unittest_extensions/case.py +++ b/src/unittest_extensions/case.py @@ -43,7 +43,8 @@ def result(self) -> Any: decorator. """ try: - return self.subject(**self._subjectKwargs) + self._subject_result = self.subject(**self._subjectKwargs) + return self._subject_result except TypeError as e: msg = e.args[0] if "unexpected keyword argument" in msg: @@ -60,6 +61,14 @@ def result(self) -> Any: ) raise e + def cachedResult(self) -> Any: + """ + Return the result of the last `subject` call. + Use this function if when you to assert different attributes of your + subject without executing it multiple times. + """ + return self._subject_result + def assertResult(self, value): """ Fail if the result is unequal to the value as determined by the '==' diff --git a/src/unittest_extensions/tests/test_use_case.py b/src/unittest_extensions/tests/test_use_case.py index 14ef048..9f5a69b 100644 --- a/src/unittest_extensions/tests/test_use_case.py +++ b/src/unittest_extensions/tests/test_use_case.py @@ -123,3 +123,15 @@ def test_change_state(self): def test_change_state_twice(self): self.assertResult(2) self.assertResult(3) + + def test_change_state_cached_result(self): + self.result() + self.assertEqual(self.cachedResult(), 2) + self.result() + self.assertEqual(self.cachedResult(), 3) + + def test_manually_change_state_cached_result(self): + self.result() + self.assertEqual(self.cachedResult(), 2) + self.instance.state_var += 1 + self.assertEqual(self.cachedResult(), 2)