#matlab
#matlab
Вопрос:
У меня есть модель Matlab и множество модульных тестов, основанных на собственной среде модульного тестирования Matlab на основе классов (matlab.unittest.TestCase и matlab.unittest.TestRunner). Тесты выдают довольно много предупреждений, некоторые из которых являются серьезными с моей точки зрения. Я бы хотел, чтобы платформа сообщала о сбое тестового примера, если появляются некоторые из конкретных предупреждений.
Тестовый бегун можно легко настроить на сбой при предупреждениях. Но тогда при любом предупреждении произойдет сбой:
import matlab.unittest.TestRunner;
import matlab.unittest.plugins.FailOnWarningsPlugin;
runner = TestRunner.withNoPlugins;
runner.addPlugin(FailOnWarningsPlugin);
Тестовый бегун также может быть настроен на игнорирование определенных предупреждений, например:
runner.addPlugin(FailOnWarningsPlugin('Ignoring',{'MATLAB:singularMatrix'}));
Вот документация:
https://se.mathworks.com/help/matlab/ref/matlab.unittest.plugins.failonwarningsplugin-class.html
Использование флага «Игнорирование» и перечисление множества предупреждений кажется проблематичным. Есть ли способ сделать это наоборот? То есть заставить мои тестовые примеры завершаться неудачей только при определенных предупреждениях и игнорировать другие?
Ответ №1:
Вы можете временно настроить сообщение о предупреждении как об ошибках:
s= warning('error', 'MATLAB:DELETE:FileNotFound'); % set warning as an error
warn(s) % restore the warning to non-error
Ссылка: https://undocumentedmatlab.com/blog/trapping-warnings-efficiently
Комментарии:
1. И если вы хотите использовать это осторожно в рамках модульного тестирования, вы можете создать свой собственный инструмент, который сохранит предыдущее состояние предупреждающего сообщения, установит для него значение error, а затем сбросит его до предыдущего, когда тест был снесен.
2. Спасибо @Anthony. На самом деле первым, что пришло мне в голову, было превращение определенных предупреждений в ошибки, но я не знал, насколько легко это можно сделать. Интересно, почему этот полезный трюк не упоминается на справочной странице Matlab для «предупреждения».