unit-testing - 如何测试私有(private)目录中的功能?

标签 unit-testing matlab xunit

我正在使用 MATLAB xUnit测试一些代码。我希望能够直接调用包含在 private 目录中的一些函数。

这是一个简单的可复制设置: 创建一个包含两个文件夹 codetest 的项目目录。在 code 中,创建一个名为 private 的子目录,这样你的目录树看起来像

project_root
  code
    private
  test

code目录下放一个函数

function y = main()
y = sub();
end

private 目录下放置一个函数

function y = sub()
y = 123;
end

test 目录下放置一个函数

function testsub()
assertElementsAlmostEqual(sub(), 123);
end

现在导航到测试目录并调用 runtests。您应该会看到一条错误消息,指出 sub 未定义。

private 目录不允许出现在 matlab 路径上,因此这不是一个选项。我可能会在 code 目录中放置一个函数来检索所有私有(private)函数的句柄,但这看起来很老套。

获取访问权限以测试私有(private)函数的最佳方式是什么?

编辑:

导航到私有(private)目录的思路有问题。理论上我可以调用,例如,

cd(privateDirectory);
suite = TestSuite.fromName(testDirectory);
suite.run

不幸的是,一旦您调用 run,测试框架就会导航到包含测试的目录。

最佳答案

一个解决方案是从 testsub 导航到私有(private)目录,得到 function handle使用 STR2FUNC 到您想要的私有(private)函数,然后导航回来使用该函数句柄进行测试。您甚至可以将这些步骤放在单独的辅助函数中进行单元测试,如下所示:

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

您将在 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

虽然 MATLAB 编辑器给了我一个 M-Lint,但这是有效的使用函数 CD 的警告:“MCC使用CD功能有问题。”我认为忽略此警告对您来说是安全的,因为 1) 函数 get_private_fcn 更改了当前目录,然后在获取函数句柄后立即将其更改回来,并且 2) 您不是 dealing with a deployed application .

关于unit-testing - 如何测试私有(private)目录中的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500103/

相关文章:

angular - 如何在 Jasmine 中监视或模拟 Angular @Input?

unit-testing - Rspec的let的Grails等效于什么?

java - 单元测试-为什么我的单元测试在使用finish(),处理程序和线程的代码上失败?

c# - xUnit 将 Trait 添加到 CollectionDefinition

wpf - 在 STA 线程 WPF 下运行多个 xunit 测试时出现问题

c# - 如何在 Moq Func<object, Class> Property { get; 中进行模拟}

r - 如何为返回数据帧的函数编写单元测试

matlab - 傅里叶级数 - 在 Matlab 中绘图

string - 包含多个模式中每个模式的单独结果

matlab - MATLAB 中的 SVM 可视化