作为previous question的后续操作,我遇到了一个新的障碍:如何在工具箱中为函数生成存根?
我找到了安迪·坎贝尔针对非toolbox case的解决方案。在我的情况下,这不起作用,因为Matlab抱怨:Pathfixtures中的MATLAB路径中不允许包目录!
我也看不到这个概念如何覆盖工具箱中的导入语句,例如在file2中。
这是我的设置:
+folder1/file1.m
+folder1/runtestsuite.m
+folder1/unittest_data/file1_testdata.mat
+folder1/+folder2/file2.m
+folder1/+folder2/unittest_data/overloads/file1.m
...
假设我想在file2中存根file1。 file2作为第一个语句:
import folder1.file1
。用
methods(Access=private)
function inject_file1_stub(testCase, answer)
import matlab.unittest.fixtures.PathFixture;
testCase.applyFixture(PathFixture(fullfile(testCase.path,'overloads')));
file1('', answer);
end
end
因此,目前我认为该概念不适用于我的情况,那么如何使用matlab正确完成此工作?
我知道,如果将另一条具有相同工具箱名称和功能的路径添加到该路径中,则可以在工具箱中隐藏该功能的实现。为此,我必须重新创建当前文件夹设置的子集:
所以我目前对灯具的想法是
用
tempdir
创建临时文件夹使用
mfilename
检查必须重新创建的工具箱目录的哪些子集生成文件夹结构
从过载文件夹复制到新的工具箱系统
将此添加到路径
运行测试
在拆解中
删除临时文件夹
从路径中删除条目
我还没有实现它,并且知道在matlab中已经有一个Pathfixture似乎有点多余。
也欢迎指向其他工具箱的指针,这些工具箱显示了它们如何解决此类问题。
最佳答案
的确,您不能在路径中添加软件包的子文件夹,但这并不意味着您不能隐藏这些路径功能。为此,您需要将与测试相关的内容从您的源位置中分离出来。例如,如果您的来源看起来像:
<source-home>/+folder1/file1.m
<source-home>/+folder1/+folder2/file2.m
然后,您可以将测试放在其他位置,以便您的结构看起来像:
<test-home>/file1Test.m
<test-home>/file2Test.m % could also put tests into packages if you want
<test-home>/overloads/+folder1/file1.m
<test-home>/overloads/+folder1/+folder2/file2.m
然后在file1Test和/或file2Test内部,您将使用PathFixture添加:
<test-home>/overloads/
到路径。
另外,要考虑的另一件事是在源代码中为这些依赖项定义一个接口,并利用dependency injection(带有或不带有DI框架)以便将特定于测试的行为纳入您的测试中。
关于matlab - Matlab工具箱测试中的 stub ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38594491/