Могу ли я настроить модульную тестовую среду Matlab на сбой при определенных предупреждениях?

#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 для «предупреждения».