2015-09-10 1 views
0

Я хотел бы создать модульное тестирование для метода filename_to_txt:Как сделать модульные тесты для методов в сложном классе в python?

class some_panel(wx.Panel): 
    def __init__(self,parent,Some_class,some_handler,Some_Event): 
     wx.Panel.__init__(self,parent=parent) 
     self.parent = parent 
     self.some_handler = some_handler 
     self.some_Event = Some_Event 
     self.some_another_class = Some_class 

    def filename_to_txt(self,input_filename): 
     splitted = input_filename.split(".raw") 
     txt_filename = splitted[0] + splitted[1] + ".txt" 
     return txt_filename 

Как я должен написать модульное тестирование для этого метода?

Это статический метод в каком-то классе, но для проверки того, что во-первых я должен сделать и экземпляр класса Some_panel.

Должен ли я предоставить все аргументы для метода __init__ класса Some_panel? Есть ли другой лучший подход, для которого мне не нужно создавать экземпляр этого класса Some_panel для тестирования метода filename_to_txt.

import unittest 
from some_file import Some_panel 

class TestSomething(unittest.TestCase): 
    def testname(self): 
     some_panel = Some_panel(????) 
     testfilename = "TestFilename.raw.001" 
     result = some_panel.filename_to_txt(input_filename = testfilename) 
     self.assertEqual(result, "TestFilename.001.txt", "Something is wrong") 

ответ

1

Если это статический метод, удалите self аргумент и украсить его с @staticmethod декоратора. Затем вы можете назвать его чистой функцией, используя some_panel.filename_to_text(filename).

+0

Спасибо за ответ! Но что, если я не могу изменить источник? Является ли этот правильный подход для создания нового класса, который наследует класс Some_panel и переопределяет метод __init__ только для прохождения? – user3537005

+0

Если вы не можете изменить источник, то вызовы 'some_panel.filename_to-text' потребуют экземпляр' some_panel') или его подкласса) в качестве первого аргумента, поэтому у вас нет опции, кроме как создать экземпляр, а затем вызовите метод. Подкласс будет наследовать '__init __()', если он не определяет его собственный. Если это так, то нужно будет явно вызвать 'some_panel .__ init __()', предпочтительно используя 'super' – holdenweb

0

Я думаю, что лучшим подходом было бы исключить класс SomePanel.

class SomePanelStub(SomePanel): 
    def __init__(self): 
    self.parent = None 
    self.some_handler = None 
    self.some_Event = None 
    self.some_another_class = None 

Теперь внутри UnitTest класса

def SetUp(self): 
    self.helper = SomePanelStub() 

Теперь вы затушили SomePanel и может легко издеваться любой зависимость.