Протестируйте приложение Python Tkinter с графическим интерфейсом без отображения элементов

Как протестировать tkinter gui без отображения элементов? Это должно сделать тест быстрее. Код ниже работает, но нужно закрыть окна tkinter после запуска теста, чтобы они закончились, есть ли возможность протестировать класс Next без запуска приложения tkinter или просто не отображать его? Я слышал о unittest.mock, но когда я пытаюсь смоделировать tk.Tk(), он вылетает. Связано: тест pygtk, unittest gtk, проверка tkinter – старая эксплантация

 import tkinter as tk


class Base(tk.Toplevel):
    def __init__(self, parent, title):
        tk.Toplevel.__init__(self.parent)
        self.transient(parent)
        self.overrideredirect(1)
        self.parent = parent
        self.title = title
        color = '#%02x%02x%02x' % (122, 17, 117)
        self.canvas = tk.Canvas(self, bg=color, relief='raised')
        # etc.


class Next(Base, object):
    def __init(self, parent, title, color='white', **kwargs):
        Base.__init__(parent, title)
        kwargs['cancel'] = self.cancel
        kwargs['tk_entry_color'] = color
        self.pg = KeyPage(self.canvas, title, **kwargs)

    def cancel(self):
        self.pg.clean()

И тестовый класс:

class TestNext(unittest.TestCase):

@classmethod
def setUpClass(cls):
    pass

@classmethod
def tearDownClass(cls):
    pass

def setUp(self):
    self.root = tk.Toplevel()
    self.title = 'test_next'
    self.kwargs = {'cancel': None}


def tearDown(self):
    self.next = None
    if self.root:
        self.root.destroy()

def test_init(self):
    page = Next(self.root, self.title, **self.kwargs)

person weis_ss    schedule 17.02.2021    source источник
comment
Я обнаружил, что: self.root.after(time_in_ms, lambda: self.root.destroy()) работает, но есть ли лучшее решение?   -  person weis_ss    schedule 17.02.2021
comment
Кстати, self.root.after(time_in_ms, self.root.destroy) короче   -  person TheLizzard    schedule 17.02.2021