MATLAB: Unit test can’t see the function it needs to test

MATLABunit testunittest

This is my first time creating unittest, and I am having trouble directing unitTestClass to see the function it tests, which lives in a different directory.
I have the following directory structure:
+utilityFUnctions/
utilityFunction1.m
utilityFunction2.m
+computeFunctions/
computeFunction1.m
computeFunction2.m
unit_tests
unitTestClass.m
test_data/
unitTestInputData.mat
unitTestExpectedOut.mat
mainFunction.m
runAllUnitTests.m
Here is the content of the runAllUnitTest.m:
This basically will run all tests in unit_tests folder
import matlab.unittest.TestSuite
suiteFolder = TestSuite.fromFolder('unit_tests');
result = run(suiteFolder);
And this is the content of unit_tests/unitTestClass.m:
classdef computeFunction1Test < matlab.unittest.TestCase
methods (Test)
function testCase1(testCase)
[input1, input2] = load('test_data/unitTestInputData.mat')
act = compute.computeFunction1(input1, input2);
exp = load('test_data/unitTestExpectedOut.mat')
testCase.verifyEqual(act, exp)
end
end
end
When I run runAllUnitTest.m I get the following error:
Undefined function 'compute.computeFunction1'
I suspect that at the time of execution, working directory is /unit_tests and therefore not recognizing compute directory and functions in the directory.
Is there a way to keep the current directory structure and make the unit test work?

Best Answer

+computeFunctions and +utilityFunctions are automatically in the Matlab's search path
Not true. In fact, package directories cannot be added to the search path. If the parent directory of the package directory is not on the search path and it is not the current directory, those package directories will not be visible to MATLAB.
If you want those package directories to be accessible to MATLAB always, add their parent directory to the path. If you only want them to be available while the test is running, consider using a matlab.unittest.fixtures.PathFixture to temporarily add that package directory to the path in one of the test setup methods. If you do when the test is torn down the path will be restored to its previous state.