code: def test_add_derived_table_alias(self):
      objs = [MagicMock(), MagicMock()]
  
      attributes = {"name": "A", "col_object": "A_obj"}
  
      mock = MagicMock(spec=TupleValueExpression)
      for attr, value in attributes.items():
          setattr(mock, attr, value)
  
      exprs = [
          mock,
          MagicMock(spec=FunctionExpression, output_objs=objs),
      ]
      ctx = StatementBinderContext(MagicMock())
  
      mock_check = ctx._check_duplicate_alias = MagicMock()
      ctx.add_derived_table_alias("alias", exprs)
      mock_check.assert_called_with("alias")
      col_map = {
          "A": "A_obj",
          objs[0].name: objs[0],
          objs[1].name: objs[1],
      }
      self.assertEqual(ctx._derived_table_alias_map["alias"], col_map)
  
imports: import unittest
  from unittest.mock import MagicMock
  import pytest
  from evadb.binder.binder_utils import BinderError
  from evadb.binder.statement_binder_context import StatementBinderContext
  from evadb.expression.function_expression import FunctionExpression
  from evadb.expression.tuple_value_expression import TupleValueExpression
label_desc: Use image node_id 4 for calling the StatementBinderTests obj's underlying member method code with example usage: obj.test_add_derived_table_alias() without return types