Отказы предположения производят 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
блок.
TestCase
| TestResult
| matlab.unittest.qualifications.Assumable