насмешливые библиотеки Python или метод-обертка - PullRequest
0 голосов
/ 01 февраля 2019

В моем коде release_bundler.py file

class MavenDependenciesPathsBuilderStrategy(PathsBuilderStrategy):

  def build_bundler_copy_paths(self, mapping_values):
    source = join(getcwd(),'target','dependency',mapping_values[0])
    destination = join(getcwd(),'target','generated-resources',mapping_values[1],mapping_values[0])
    return [source, destination]

class NestedModulePathsFilterStrategy(FilterStrategy):

  def filter_changeset_paths(self, changeset_paths, bundling_map, paths_builder_strategy):
    for mapping_key in bundling_map.keys():
      if(mapping_key in changeset_paths):
        mapping_values = bundling_map.get(mapping_key).values()
        copy_paths = paths_builder_strategy.build_bundler_copy_paths(mapping_values)
        return copy_paths

Если я хочу проверить метод filter_changeset_paths, мне придется смоделировать оба метода getcwd внутри метода build_bundler_copy_paths или только mockingпоследний подойдет?

Я пытался смоделировать метод в своих тестах release_bundler_test.py, импортируя классифицированный следующим образом:

from release_bundler import NestedModulePathsFilterStrategy, MavenDependenciesPathsBuilderStrategy

затем исправьте класс MavenDependenciesPathsBuilderStrategy

def mock_build_bundler_copy_paths(self, mapping_values):
  return ['/cwd/foo','/cwd/bar']

@mock.patch('release_bundler.MavenDependenciesPathsBuilderStrategy', 'build_bundler_copy_paths', mock_build_bundler_copy_paths)
  def test_nested_module_filter_changeset_paths(self):
    pc_maps = {'ProcessingComponents/ProcessContainer':['ProcessContainerInstaller-bin.zip','SERVICES/Installer'],'ProcessingComponents/DataGrid':['ProcessContainerInstaller-bin.zip','SERVICES/Installer']}
    changed_paths =  ['ProcessingComponents/ProcessContainer/ProcessContainerRuntime/main/java/com/suntecgroup/tbms/container/ContainerException.java']
    filter_test = NestedModulePathsFilterStrategy()
    result = filter_test.filter_changeset_paths(changed_paths,pc_maps, MavenDependenciesPathsBuilderStrategy())
    self.assertIsNotNone(result)
    self.assertEquals(result[0], '/cwd/foo')
    self.assertEquals(result[0], '/cwd/bar')

но я не думаю, что это издевательство работает, потому что self.assertIsNotNone(result) терпит неудачу

Так что вопросы:

  1. Я издеваюсь правильно?я не могу понять, как это сделать
  2. будет издеваться над методом MavenDependenciesPathsBuilderStrategy, или мне придется высмеивать os.getcwd внутри этого метода?

1 Ответ

0 голосов
/ 01 февраля 2019

Мое плохое, мои мозги новичка на питоне потратили некоторое время, чтобы освоиться:

вот как это работает хорошо

  @mock.patch('release_bundler.MavenDependenciesPathsBuilderStrategy.build_bundler_copy_paths')
  def test_filters_pc_from_changeset_paths(self, mock_build_bundler_copy_paths):
    pc_maps = {'ProcessingComponents/ProcessContainer':['ProcessContainerInstaller-bin.zip','SERVICES/Installer']}
    changed_paths =  ['ProcessingComponents/ProcessContainer/ProcessContainerRuntime/main/java/com/suntecgroup/tbms/container/ContainerException.java']
    with mock.patch('release_bundler.NestedModulePathsFilterStrategy.do_copy') as mock_do_copy: 
      mock_do_copy.return_value = ''
      filter_test = NestedModulePathsFilterStrategy()
      filter_test.filter_changeset_paths(changed_paths,pc_maps, MavenDependenciesPathsBuilderStrategy())
      mock_build_bundler_copy_paths.assert_called_with(['ProcessContainerInstaller-bin.zip','SERVICES/Installer'])
      mock_do_copy.assert_called()

Я могу ошибаться, но я думаю, что мы не можемприменить несколько декораторов к методу?

...