sumej
@sumej
DevOps

Как работать с mock в python?

Привет всем.

Есть функция getSubRoles(). Она использует совершенно реальный класс pb_access, который запускает внешнюю программу. Хотелось бы не запускать её каждый раз для тестов. Подойдет ли mock?

class ApiBaseClass:
    def getSubRoles(self,hosts=None,roless=None,config_path=None):   
        if hosts==None:
            hosts=["127.0.0.1"]
        if roless==None:
            roless=[]
        
        roles=self.toList(roless)
        if isinstance(roles, list)==False:
            self.logAndRaiseValueError("type of roles isn't list, it's %s" % type(roles))
        playbooks={}
        try:
            playbooks=self._getPlaybookForRoles(roles,config_path)
        except Exception as e:     
            # TODO: raise or not?       
            self.logAndRaiseValueError("Can't _getPlaybookForRoles for %s because:%s" % (roles,e) )

        # gethering all current tasks
        subroles={}
        subrolesWithPlaybook={}
        with self._lock:            
            for role in roles:
                if subroles.has_key(role)==False:
                    subroles[role]={}
                if subrolesWithPlaybook.has_key(role)==False:
                    subrolesWithPlaybook[role]={}
                if playbooks.has_key(role):
                    for playbook in playbooks[role]:
                        if subrolesWithPlaybook[role].has_key(playbook)==False:
                            subrolesWithPlaybook[role][playbook]={}
                        try:    
                            options=self.__PLAYBOOK_OPTIONS.copy()
                            options['playbook']=playbook
                            tags=pb_access.get_tags(hosts,options)                                                     

                            subroles[role].update(tags)
                            subrolesWithPlaybook[role][playbook].update(tags)
                        except Exception as e:
                            self.logAndRaiseValueError("Can't get_tags because: %s" %e)
        return subroles,subrolesWithPlaybook


У меня в коде постоянное чтение и запись в файлы. Можно ли с посошью мок не читать и писать в тестах?
  • Вопрос задан
  • 572 просмотра
Пригласить эксперта
Ответы на вопрос 1
@commander_spock
C++ Developer, Student
чтобы не читать/писать в файлы, можно использовать мок, который будет держать все в памяти и получать/отдавать строки, как будто вы их считали/записали в файл. хранить все в каком-нибудь листе, например
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы