Unittesting Matlab System Block
조회 수: 16 (최근 30일)
이전 댓글 표시
I want to develop some "Matlab System Blocks". For testing their functionality and debugging their code I would like to Unittest them. The method, that I want to test is the "stepImpl" method of the "Matlab System Block".
Unfortunately the "stepImpl" method is a protected method so I can't Unittest them. I know an alternative is to implement the method in other file as a public method or in the "Matlab System Block" as public Method and use this method in the "stepImpl" Method. I already tried to make the "stepImpl" Method public, but this gave me an error.
However I'm hoping for a better way of Unittesting the "Matlab System Block". Are their any best practises or guidelines?
댓글 수: 0
답변 (1개)
Altaïr
2025년 2월 3일
Since the stepImpl function is protected, creating an inherited subclass and using a class-based unit test can be a good approach. Here is an example using the MySystemBlock system block:
classdef MySystemBlock < matlab.System
% Example MATLAB System block that doubles the input value
methods (Access = protected)
function y = stepImpl(obj, x)
y = 2 * x;
end
end
end
The stepImpl method is protected and cannot be tested directly. Therefore, a subclass TestableMySystemBlock can be created:
classdef TestableMySystemBlock < MySystemBlock
methods (Access = public)
function y = testStepImpl(obj, x)
% Directly call the protected stepImpl method
y = stepImpl(obj, x);
end
end
end
A class-based unit test can then be written for this inherited class:
classdef TestMySystemBlockSubclass < matlab.unittest.TestCase
methods (Test)
function testStepImpl(testCase)
% Create an instance of the testable subclass
sysObj = TestableMySystemBlock;
% Define test cases
testInputs = [1, 2, 3, 0, -1, -2];
expectedOutputs = [2, 4, 6, 0, -2, -4];
% Loop through each test case
for i = 1:length(testInputs)
% Call the testStepImpl in the inherited class
actualOutput = sysObj.testStepImpl(testInputs(i));
% Verify the output
testCase.verifyEqual(actualOutput, expectedOutputs(i), ...
'AbsTol', 1e-10, ...
sprintf('Failed for input: %d', testInputs(i)));
end
end
end
end
To run the tests, execute the following commands in the MATLAB Command Window:
resultsSubclassMethod = runtests('TestMySystemBlockSubclass');
disp(resultsSubclassMethod);
For more information on writing unit tests, the following command can be executed in the MATLAB Command Window:
web(fullfile(docroot, 'matlab/matlab_prog/ways-to-write-unit-tests.html'))
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Create System Objects에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!