Мне интересно, как я могу сделать модульный тест для автоматической остановки при возникновении ошибки в тестируемой системе (sut)?
Предположим, что модульный тест запускает около 1000 различных входных комбинаций, ипредполагается, что результаты соответствуют ожиданиям.Теперь давайте предположим, что в sut есть простая синтаксическая ошибка, которая вызывает ошибку.В этом случае я бы хотел, чтобы модульный тест автоматически останавливался и вызывал метод срыва.
Возможно ли это?
Редактировать:
Я заимствовал пример MATLAB изих справочный сайт (https://de.mathworks.com/help/matlab/matlab_prog/create-basic-parameterized-test.html), чтобы более четко показать, что я имею в виду:
Здесь вы можете увидеть тестовый класс:
classdef TestCarpet < matlab.unittest.TestCase
properties (TestParameter)
type = {'single','double','uint16'};
level = struct('small', 2,'medium', 4, 'large', 6);
side = struct('small', 9, 'medium', 81,'large', 729);
end
methods (Test)
function testRemainPixels(testCase, level)
% expected number pixels equal to 1
expPixelCount = 8^level;
% actual number pixels equal to 1
actPixels = find(sierpinski(level));
testCase.verifyNumElements(actPixels,expPixelCount)
end
function testClass(testCase, type, level)
testCase.verifyClass(...
sierpinski(level,type), type)
end
function testDefaultL1Output(testCase)
exp = single([1 1 1; 1 0 1; 1 1 1]);
testCase.verifyEqual(sierpinski(1), exp)
end
end
methods (Test, ParameterCombination='sequential')
function testNumel(testCase, level, side)
import matlab.unittest.constraints.HasElementCount
testCase.verifyThat(sierpinski(level),...
HasElementCount(side^2))
end
end
end
Вот тестируемая система:
function carpet = sierpinski(nLevels,classname)
if nargin == 1
classname = 'single';
end
% original line: mSize = 3^nLevels;
mSize = "That's clearly wrong here";
carpet = ones(mSize,classname);
cutCarpet(1,1,mSize,nLevels) % begin recursion
function cutCarpet(x,y,s,cL)
if cL
ss = s/3; % define subsize
for lx = 0:2
for ly = 0:2
if lx == 1 && ly == 1
% remove center square
carpet(x+ss:x+2*ss-1,y+ss:y+2*ss-1) = 0;
else
% recurse
cutCarpet(x + lx*ss, y + ly*ss, ss, cL-1)
end
end
end
end
end
end
Я изменил определение mSize
на строку, чтобы вызвать ошибку. Теперь, если я запускаю тесты, все тесты приведут к ошибке. Мне интересно, можно ли остановитьтесты как можно скорее, т. е. после появления первой ошибки?
Проблема, которую я вижу, состоит в том, что тестовый код даже не достигнет последней строки testRemainPixels (testCase.verifyNumElements(actPixels,expPixelCount))
. FatalAssert не помогает приэта точка, верно?