2015-09-18 2 views
0

Я пишу модульные тесты для простого графического интерфейса, написанного в PySide 1.2.2. Я работаю над Windows 7 и с Python 2.7.6.Тестирование QFileDialog при использовании PySide

Я хочу проверить эту функцию, которая активируется при нажатии кнопки.

def setDestination(self): 
    directory = QtGui.QFileDialog.getExistingDirectory(self, "Select Directory") 
    self.destLineEdit.setText(directory) 

До сих пор я придумал следующий тестовый пример:

def test_browse_dest(self): 
    # Reset the GUI to its defaults 
    self.clear() 

    # Click the destination browse button 
    QTest.mouseClick(self.window.browseButton_2, QtCore.Qt.LeftButton) 

    # Test paths 
    destPath = os.path.join(os.getcwd(), TEST_DIR_B, "test") 
    self.assertEqual(self.window.destLineEdit.text(), destPath) 

Этот тест работает, но это является интерактивным. Мне нужно выбрать каталог и нажать кнопку «Выбрать папку». Хотя это, конечно, здорово и интересно играть, мне было интересно, есть ли способ автоматизировать эти действия.

Я попытался просто скрыть диалог с файлом и установить текст в строке самостоятельно. Во-первых, я написал следующее:

def setDestination(self): 
    self.fileDialog = QtGui.QFileDialog() 
    directory = self.fileDialog.getExistingDirectory(self, "Select Directory") 
    self.destLineEdit.setText(directory) 

Затем я попытался открыть диалоговое окно файла внутри модульного теста.

def test_browse_dest(self): 
    # Reset the GUI to its defaults 
    self.clear() 

    # Click the destination browse button 
    QTest.mouseClick(self.window.browseButton_2, QtCore.Qt.LeftButton) 
    self.window.fileDialog.hide() 

    # Test paths 
    destPath = os.path.join(os.getcwd(), TEST_DIR_B, "test") 
    self.window.destLineEdit.setText(destPath) 
    self.assertEqual(self.window.destLineEdit.text(), destPath) 

Однако, это не сработало. Диалоговое окно файла все еще запущено, и мне пришлось взаимодействовать с ним для завершения теста.

ответ

0

Моим решением было создать параметр тестового режима в GUI-классе, который запускает диалог с файлом. Что-то вроде этого ...

class MyWindow(QtGui.QMainWindow): 
    def __init__(self, testMode=False): 
     QtGui.QMainWindow.__init__(self) 
     self.testMode = testMode 

Если TestMode верно (при выполнении модульного тестирования, например), я просто скрыть диалоговое окно, а затем установить линию редактирует вручную модульных тестов.

Это действительно работает, но я волнуюсь, если я побеждаю цель испытаний. С другой стороны, я думаю, вы могли бы сказать, что я просто «заглушил» взаимодействие пользователя.

Смежные вопросы