Как проверить Matlabs, блокирующий uiconfirm? - PullRequest
1 голос
/ 03 июля 2019

У меня есть класс с простым пользовательским интерфейсом, и я хочу написать модульные тесты для всех открытых функций-членов.

Одна из моих кнопок выдает предупреждение через диалоговое окно.Я использую функцию uiconfirm и присваиваю результат переменной, чтобы заблокировать функцию, пока пользователь не подтвердит диалоговое окно.

classdef UI
    properties
        fig    matlab.ui.Figure
        button matlab.ui.control.Button
    end

    methods
        function obj = UI()
            obj.fig = uifigure();
            obj.button = uibutton(obj.fig);
            obj.button.Text = "click me";
            obj.button.ButtonPushedFcn = @(~, ~) obj.click();
        end
    end

    methods
        function click(obj)
            [~] = uiconfirm(obj.fig, "Something failed.", "Warning", ...
                "Options", {'OK'}, "Icon", "warning");
        end
    end
end

Я использую модульные тесты на основе классов:

Как проверить функцию щелчка?

1 Ответ

2 голосов
/ 08 июля 2019

Я не совсем уверен, знакомы ли вы с Matlab App Testing Framework .Платформа тестирования приложений позволяет программно взаимодействовать с приложениями-дизайнерами / приложениями uifigure.Взгляните на матрицу доступности жестов компонентов, чтобы ускорить ваши потребности в тестировании пользовательского интерфейса.Сказав, что на сегодняшний день среда тестирования приложений еще не поддерживает непосредственное взаимодействие с блокирующим диалогом пользовательского интерфейса, как uiconfirm.

Очевидным грубым способом решения проблемы блокировки является дублирование тестируемой функции uiconfirm с помощью пользовательской версии, которая может быть неблокирующей.Если это достаточно простое и приемлемое для вас решение, продолжайте его.Однако, по мере того, как ваше приложение изменяется и масштабируется, имитация может также усложниться и, следовательно, стать трудной в обслуживании.

Имея это в виду, лучший подход к программному тестированию вашего приложения - использовать mocking framework для создания фиктивного объекта, определяющего поведение uiconfirm.Лучший способ добиться этого - через инъекцию зависимостей.В вашем случае приложение может иметь / иметь свойство, которое может хранить контекстно-зависимый объект «UIConfirm [имя в соответствии с вашим рабочим процессом]».По умолчанию в производственной среде она будет вызывать настоящую команду uiconfirm, но делегатор «mock» или «stub» может предоставить детерминированные выходные данные, чтобы сделать систему более тестируемой (и вообще избежать проблемы с «блокировкой» диалога). Это, безусловно, добавляет накладные расходы.чтобы сделать это в другом простом приложении, но я чувствую, что вы цените тестирование так же, как и мы!

Также, пожалуйста, посмотрите на этот подробный пример тестирования Mocking-App https://www.mathworks.com/help/matlab/matlab_prog/write-test-that-uses-app-testing-and-mocking-frameworks.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...