python исправьте метод на объекте класса - PullRequest
0 голосов
/ 07 апреля 2020

С учетом структур классов:

class BaseDataset:
   def _create_context_in_base(self):
      return "some_context"

class Dataset(BaseDataset):
    def create_context(self):
       return self._create_context_in_base()

Я пытаюсь проверить с макетом, как:

def override_method():
    config = dict({"A":1})
    ctx = OBJECT_REQUIRED.create_context() """ How to get this object. Method doesn't take any argument in source """
    ctx.update_config(config)
    return ctx


class DatasetTests(unittest.TestCase):
    def test_dataloader(self):
        dataset = create_dataset()
        ...

        with patch.object(dataset, "create_context", new=override_method):
          ....

1 Ответ

0 голосов
/ 07 апреля 2020

Догадываясь о том, чего вы хотите достичь, вы можете просто использовать лямбду, где вы передаете свой объект:

def override_method(self):
    config = dict({"A": 1})
    ctx = self._create_context_in_base()  # you cannot call create_context, that would cause a recursion!
    ctx.update_config(config)
    return ctx


class DatasetTests(unittest.TestCase):
    def test_dataloader(self):
        dataset = Dataset()
        # this is assuming that the dataset shall be passed as object  
        with mock.patch.object(dataset, "create_context",
                               new=lambda: override_method(dataset)):
            dataset.create_context()
...