在MATLAB单元测试中共享变量

3
我正在编写一个单元测试,以确保一些重构的MATLAB代码产生与传统代码相同的结果。有几个测试,但运行传统代码涉及耗时的活动,即加载多个文件并处理数据以生成矩阵A。我想使用setupOnce来运行传统代码,然后将A传递给各个单元测试。这可行吗?如果可以,应该如何实现?我的代码可能类似于这样:
function setupOnce(testCase)
    expectedA = buildOldMatrix; % calls legacy code
end

function testNewMatrix(testCase)
    actualA = buildNewMatrix; % calls new code
    verifyEqual(testCase, expectedA, actualA)
end

3
我假设从setupOnce()返回expectedA作为输出,然后在testNewMatrix()中将其作为输入参数使用并不是你想要的。如果你的矩阵不是很大,你可以让setupOnce()将旧矩阵保存为.mat文件。然后testNewMatrix()只需要加载该文件并进行比较,而不是运行耗时的遗留代码。 - undefined
我建议使用saveload,就像@Till所说的那样。 - undefined
setupOnce()返回expectedA作为输出,然后在testNewMatrix()中将其作为输入参数使用,听起来是一个不错的解决方案,但我还没有找到在基于函数的测试中如何实现这个语法。 - undefined
在测试函数中添加一个输入,例如function testNewMatrix(testCase,legacyResults)会出现警告:"testNewMatrix"函数必须只接受一个参数。 - undefined
其实,我并不是真的意识到我们在谈论基于函数的测试^^ 如果无法传递参数,那么你可能需要使用基于类的测试。如果我说错了,有人可以纠正我。 - undefined
1个回答

2
我认为你想要的是将expectedA存储在testCase.TestData中,以便在后续的测试用例中使用。像这样(这是整个"myTests.m"文件):
function tests = myTests
% Run using: runtests('myTests.m')
tests = functiontests(localfunctions);
end

% Build and store "A"
function setupOnce(testCase)
% Store a matrix for use in later tests
testCase.TestData.A = magic(3);
end

% A test case
function testOne(testCase)
expectedA = testCase.TestData.A;
actualA = magic(3);
verifyEqual(testCase, actualA, expectedA);
end

% Another test case
function testTwo(testCase)
expectedA = testCase.TestData.A;
actualA = magic(3).'; % Deliberately wrong
verifyEqual(testCase, actualA, expectedA);
end

这里有更多的文档点击这里

一如既往,请阅读完整的手册。我曾经看过那个文档页面,但是错过了TestData部分。 - undefined
我必须承认这对我来说是新鲜事物 - 我更熟悉基于类的单元测试,但我确信一定有办法用基于函数的测试来完成它。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接