Ric*_*ton 8 matlab unit-testing xunit
我正在使用MATLAB xUnit来测试一些代码.我希望能够直接调用private目录中包含的某些函数.
这里有一个简单的复制设置:有两个文件夹中创建自己的项目目录code和test.在code,创建一个名为的子目录,private以便目录树看起来像
project_root
code
private
test
Run Code Online (Sandbox Code Playgroud)
在code目录中放置一个函数
function y = main()
y = sub();
end
Run Code Online (Sandbox Code Playgroud)
在privatedir放置一个函数
function y = sub()
y = 123;
end
Run Code Online (Sandbox Code Playgroud)
在testdir放置一个函数
function testsub()
assertElementsAlmostEqual(sub(), 123);
end
Run Code Online (Sandbox Code Playgroud)
现在导航到测试目录并调用runtests.您应该看到一个错误,说明sub未定义.
privatematlab路径上不允许使用目录,因此这不是一个选项.我可以在codedir中放一个函数来检索所有私有函数的句柄,但这看起来很糟糕.
访问测试私有函数的最佳方法是什么?
编辑:
导航到私人目录的想法有问题.理论上我可以打电话,例如,
cd(privateDirectory);
suite = TestSuite.fromName(testDirectory);
suite.run
Run Code Online (Sandbox Code Playgroud)
不幸的是,一旦调用,测试框架就会导航到包含测试的目录run.
一种解决方案是从内部 导航到私有目录testsub,使用STR2FUNC获取所需私有函数的函数句柄,然后导航回使用该函数句柄进行测试.您甚至可以将这些步骤放在单独的辅助函数中进行单元测试,如下所示:
function privateFcn = get_private_fcn(privateDir,fcnName)
oldDir = cd(privateDir); %# Change to the private directory
privateFcn = str2func(fcnName); %# Get a function handle
cd(oldDir); %# Change back to the original directory
end
Run Code Online (Sandbox Code Playgroud)
你可以使用这个函数testsub如下:
function testsub()
privateDir = '...\project_root\code\private'; %# The path to the private
%# directory
privateFcn = get_private_fcn(privateDir,'sub'); %# Call get_private_fcn
assertElementsAlmostEqual(privateFcn(), 123); %# Apply your test
end
Run Code Online (Sandbox Code Playgroud)
这是有效的,虽然MATLAB编辑器给我一个M-Lint警告使用功能CD:"MCC使用CD功能是有问题的." 我认为忽略此警告是安全的,因为1)该函数get_private_fcn更改了当前目录,然后在获取函数句柄后立即将其更改回来,2)您没有处理已部署的应用程序.
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |