def test_4(self): invoker = FunctionInvoker() invoker.provide_object('4', provide_name="abc") invoker.provide_object('5') invoker2 = invoker.create_transient() invoker2.provide_object('6') self.assertEqual(invoker.invoke(func1), '4') self.assertEqual(invoker2.invoke(func1), '4') # because match name and type, so return '4' invoker3 = invoker.create_transient() invoker3.provide_object('7', provide_name="abc") self.assertEqual(invoker.invoke(func1), '4') self.assertEqual(invoker2.invoke(func1), '4') self.assertEqual(invoker3.invoke(func1), '7')