Отказы предположения производят filtered tests. В matlab.unittest.TestResult класс, таким тестом является отмеченный Incomplete.
Начиная с фильтрации содержания теста с помощью предположений не производит непройденные тесты, это имеет возможность создания мертвого тестового кода. Предотвращение этого требует контроля отфильтрованных тестов.
Если с отказом предположения сталкиваются в TestCase метод с Test припишите, целый метод отмечен, как отфильтровано, но MATLAB® запускает последующий Test методы.
Следующий класс содержит отказ предположения в одном из методов в Test блок.
classdef ExampleTest < matlab.unittest.TestCase methods(Test) function testA(testCase) testCase.verifyTrue(true) end function testB(testCase) testCase.assumeEqual(0,1) % remaining test code is not exercised end function testC(testCase) testCase.verifyFalse(true) end end end
Начиная с testB метод содержит отказ предположения, когда вы запускаете тест, фильтры среды тестирования, которые тестируют и отмечают его как неполный. После отказа предположения в testB, среда тестирования продолжает и выполняет testC, который содержит отказ верификации.
ts = matlab.unittest.TestSuite.fromClass(?ExampleTest); res = ts.run;
Running ExampleTest
.
================================================================================
ExampleTest/testB was filtered.
Details
================================================================================
.
================================================================================
Verification failed in ExampleTest/testC.
---------------------
Framework Diagnostic:
---------------------
verifyFalse failed.
--> The value must evaluate to "false".
Actual logical:
1
------------------
Stack Information:
------------------
In C:\work\ExampleTest.m (ExampleTest.testC) at 11
================================================================================
.
Done ExampleTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
================================================================
ExampleTest/testB X Filtered by assumption.
----------------------------------------------------------------
ExampleTest/testC X Failed by verification.Если вы исследуете TestResult, вы замечаете, что существует прошедший тест, проваленный тест и тест, который не завершался из-за отказа предположения.
res
res =
1×3 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
1 Passed, 1 Failed, 1 Incomplete.
2.4807 seconds testing time.Среда тестирования отслеживает неполные тесты так, чтобы можно было контролировать отфильтрованные тесты на неосуществленный тестовый код. Вы видите информацию об этих тестах в TestResult объект.
res([res.Incomplete])
ans =
TestResult with properties:
Name: 'ExampleTest/testB'
Passed: 0
Failed: 0
Incomplete: 1
Duration: 2.2578
Details: [1×1 struct]
Totals:
0 Passed, 0 Failed, 1 Incomplete.
2.2578 seconds testing time.Чтобы создать модифицированный тестовый набор только из отфильтрованных тестов, выберите неполные тесты из исходного тестового набора.
tsFiltered = ts([res.Incomplete])
tsFiltered =
Test with properties:
Name: 'ExampleTest/testB'
ProcedureName: 'testB'
TestClass: "ExampleTest"
BaseFolder: 'C:\work'
Parameterization: [0×0 matlab.unittest.parameters.EmptyParameter]
SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
Tags: {1×0 cell}
Tests Include:
0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.Если с отказом предположения сталкиваются в TestCase метод с TestMethodSetup атрибут, MATLAB фильтрует метод, который должен был быть запущен для того экземпляра. Если тест использует предположения из TestMethodSetup блокируйте, рассмотрите вместо этого использование предположений в TestClassSetup блокируйтесь, который аналогично фильтрует весь Test методы в классе, но менее многословны и более эффективны.
Один из методов в следующем TestMethodSetup блокируйтесь в ExampleTest.m содержит отказ предположения.
methods(TestMethodSetup)
function setupMethod1(testCase)
testCase.assumeEqual(1,0)
% remaining test code is not exercised
end
function setupMethod2(testCase)
disp('* Running setupMethod2 *')
testCase.assertEqual(1,1)
end
end
Обновленный ExampleTest Определение класса
То, когда вы запускаете тест, вы видите, что среда завершается, выполняет все методы в TestMethodSetup блокируйтесь, которые не содержат отказ предположения, и он отмечает как неполный все методы в Test блок.
ts = matlab.unittest.TestSuite.fromClass(?ExampleTest); res = ts.run;
Running ExampleTest
================================================================================
ExampleTest/testA was filtered.
Details
================================================================================
* Running setupMethod2 *
.
================================================================================
ExampleTest/testB was filtered.
Details
================================================================================
* Running setupMethod2 *
.
================================================================================
ExampleTest/testC was filtered.
Details
================================================================================
* Running setupMethod2 *
.
Done ExampleTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
================================================================
ExampleTest/testA X Filtered by assumption.
----------------------------------------------------------------
ExampleTest/testB X Filtered by assumption.
----------------------------------------------------------------
ExampleTest/testC X Filtered by assumption.Test методы не изменились, но все 3 отфильтрованы из-за отказа предположения в TestMethodSetup блок. Среда тестирования выполняет методы в TestMethodSetup блокируйтесь без отказов предположения, таких как setupMethod2. Как ожидалось среда тестирования выполняет setupMethod2 3 раза, однажды каждый Test метод.
Если с отказом предположения сталкиваются в TestCase метод с TestClassSetup или TestClassTeardown атрибут, MATLAB фильтрует целый TestCase класс.
Методы в следующем TestClassSetup блокируйтесь в ExampleTest.m содержит отказ предположения.
methods(TestClassSetup)
function setupClass(testCase)
testCase.assumeEqual(1,0)
% remaining test code is not exercised
end
end
Обновленный ExampleTest Определение класса
Когда вы запускаете тест, вы видите, что среда не выполняет ни одного из методов в TestMethodSetup или Test.
ts = matlab.unittest.TestSuite.fromClass(?ExampleTest); res = ts.run;
Running ExampleTest
================================================================================
All tests in ExampleTest were filtered.
Details
================================================================================
Done ExampleTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
================================================================
ExampleTest/testA X Filtered by assumption.
----------------------------------------------------------------
ExampleTest/testB X Filtered by assumption.
----------------------------------------------------------------
ExampleTest/testC X Filtered by assumption.Test и TestMethodSetup методы не изменились, но все отфильтровано из-за отказа предположения в TestClassSetup блок.
matlab.unittest.qualifications.Assumable | matlab.unittest.TestCase | matlab.unittest.TestResult