How to perform multiple identical unit tests.
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Graham House
el 28 de Nov. de 2013
Comentada: Matlab Pro
el 25 de Dic. de 2023
Apologies if my question has a relativity simple solution which I have failed to see, but I'm really quite new to the MATLAB unit test framework.
Basically I have a list of over 100 MATLAB scripts that I need to perform the same unit test on. Is there an easy way to do this without having to write out each test individually?
I should also point out that it's important I'm able to see which .m file each test refers to.
Thanks
0 comentarios
Respuesta aceptada
David Hruska
el 30 de Nov. de 2013
Hi Graham,
One approach is to define your test content in an abstract base class. The test content would refer to an abstract property or method in the base class that is implemented by each subclass. You would need 100+ subclasses (one for each of the scripts that you want to test). Andy Campbell gives a concrete example of this approach here. This approach has the obvious disadvantage of requiring the definition of over 100 test classes; however, they would likely be quite simple. One benefit is that you can easily run the unit test for just one script file by itself.
Alternatively, you could consider writing Test methods that operate on all the scripts using a for loop. In order to provide defect localization in the event of a test failure, you could construct a diagnostic that identifies the script being tested. Here's a rough outline of an example:
classdef exampleTest < matlab.unittest.TestCase
methods (Test)
function test1(testCase)
% Test 100 scripts
for i = 1:100
% Operate on script i
testCase.verifyThat(result_of_script_i, <constraint>, ...
sprintf('Testing script %d', i));
end
end
end
end
With this approach, you lose the ability to easily run the test for just one of the scripts by itself, but the test is fairly easy to write.
Hope this helps,
David
0 comentarios
Más respuestas (1)
David Hruska
el 7 de Mzo. de 2014
Release 2014a provides another solution that you may want to consider -- writing a parameterized test. Please see this answer for more details.
2 comentarios
Matlab Pro
el 25 de Dic. de 2023
Here is a specific example that can help you:
This examples calls get_files_to_analyse(), a tests is automatically defined for each file
Yuu do not need to change any of the files
classdef exampleTest < matlab.unittest.TestCase
properties (TestParameter)
files = get_files_to_analyse();
end
methods (Test)
function test1(testCase, files)
results = operate_on_file(files);
testCase.verifyThat(results, <constraint>, ...
sprintf('Testing script %d', i));
end
end
end
%-------------------------------------------------------------
function files = get_files_to_analyse()
base_path_of_files_to_analyse = pwd; % base_path_of_files_to_analyse
d = dir(base_path_of_files_to_analyse);
d = d(~ismember({d.name},{'.','..'})); % remove "." & ".."
files = cellfun(@(x) fullfile(base_path_of_files_to_analyse,x),{d.name}','uni',0);
end
%-------------------------------------------------------------
function operate_on_file(file1)
% do something
end
Ver también
Categorías
Más información sobre Write Unit Tests en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!