单元测试/与 Simulink/Stateflow 持续集成

2023-12-26

如何在 Simulink(或者最好是 Stateflow)中执行单元测试?

我是敏捷软件方法的粉丝,包括测试驱动开发。我负责安全关键控制软件的开发,我们使用 Matlab/Simulink/Stateflow 来开发它。选择此工具集是因为与工厂(硬件)模型的链接。 (模型在环、硬件在环)

我在 Stackoverflow 上找到了一些链接:MATLAB 单元测试框架 https://stackoverflow.com/questions/3992295/unit-testing-framework-for-matlab: xunit http://www.mathworks.com/matlabcentral/fileexchange/22846-matlab-xunit-test-framework, slunit http://sourceforge.net/projects/mlunit/ and doctest http://www.mathworks.com/matlabcentral/fileexchange/28862-doctest-embed-testable-examples-in-your-functions-help-comments.

  • 有人有使用这些或不同单元测试框架的经验吗?
  • 如何将其链接到持续集成系统(即 Hudson)?

编辑:现在这变得更加容易,并且随着MATLAB 的 Jenkins 插件 https://plugins.jenkins.io/matlab/

原答案:

正如 Craig 提到的,R2013a 中确实引入了 MATLAB 框架。此外,该框架还添加了一个TAPP插件 http://www.mathworks.com/help/matlab/ref/matlab.unittest.plugins.tapplugin-class.html在 R2014a 中输出测试任何协议 http://testanything.org/。使用该协议,您可以使用 TAPPlugin 设置 CI 构建(例如Jenkins https://wiki.jenkins-ci.org/display/JENKINS/TAP+Plugin, TeamCity https://github.com/pavelsher/teamcity-tap-parser),这样如果测试失败,CI 系统可能会导致构建失败。

您的 CI 构建可能看起来像启动 MATLAB 并运行所有测试的 shell 命令:

/your/path/to/matlab/bin/matlab -nosplash -nodisplay -nodesktop -r "runAllMyTests"

然后 runAllMyTests 创建要运行的套件并运行它,并将 Tap 输出重定向到文件。您需要在这里调整细节,但这也许可以帮助您开始:

function runAllMyTests

import matlab.unittest.TestSuite;
import matlab.unittest.TestRunner;
import matlab.unittest.plugins.TAPPlugin;
import matlab.unittest.plugins.ToFile;

try
    % Create the suite and runner
    suite = TestSuite.fromPackage('packageThatContainsTests', 'IncludingSubpackages', true);
    runner = TestRunner.withTextOutput;
    
    % Add the TAPPlugin directed to a file in the Jenkins workspace
    tapFile = fullfile(getenv('WORKSPACE'), 'testResults.tap');
    runner.addPlugin(TAPPlugin.producingOriginalFormat(ToFile(tapFile)));

    runner.run(suite); 
catch e;
    disp(e.getReport);
    exit(1);
end;
exit force;

EDIT:我用这个主题作为first http://blogs.mathworks.com/developer/2015/01/20/the-other-kind-of-continuous-integration/ two http://blogs.mathworks.com/developer/2015/01/29/tap-plugin/的帖子新的面向开发人员的博客 http://blogs.mathworks.com/developer/今年推出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试/与 Simulink/Stateflow 持续集成 的相关文章

  • 参数化测试也取决于 pytest 中的参数化值

    我有一个测试 我有一个设置方法 应该收到一个dataset和一个测试函数 应该为每个运行data in dataset 基本上我需要类似的东西 datasetA data1 a data2 a data3 a datasetB data1
  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • VS2012 单元测试:如何更改 TestResults 文件夹的位置

    我将所有单元测试项目都放在解决方案文件夹下的一个文件夹中 并且希望将 TestResults 文件夹放在与测试项目相同的文件夹中 而不是放在解决方案目录中 我发现这可以通过测试设置文件来完成 如何在VS 2010中指定单元测试结果的位置 h
  • MATLAB:解包函数

    我正在与 Mathworks 的某人讨论 unwrap http www mathworks com access helpdesk help techdoc ref unwrap html函数中对于 以外的跳跃容差有一个 bug 并且希望
  • 我的傅立叶逆变换中的尖峰

    我正在尝试在 MATLAB 中比较两个数据集 为此 我需要通过傅里叶变换数据来过滤数据集 对其进行过滤 然后对其进行逆傅里叶变换 然而 当我对数据进行逆傅里叶变换时 我在红色数据集的两端都出现了一个尖峰 图片显示了第一个尖峰 它在开始时应该
  • 在 docker build 中缓存“go get”

    我想将 golang 单元测试封装在 docker compose 脚本中 因为它依赖于多个外部服务 我的应用程序有很多依赖项 因此需要一段时间go get 如何以允许构建 docker 容器的方式缓存包 而无需每次要测试时下载所有依赖项
  • 如何在 gitlab-ci 作业之间传递变量?

    我有一个像这样的 gitlab ci stages calculation execution calculation job stage calculation script calculate something and output
  • 在Matlab中使用中心切片定理实现滤波反投影算法

    我正在研究一种使用中心切片定理的滤波反投影算法作为家庭作业 虽然我理解纸上的理论 但在 Matlab 中实现它时遇到了问题 我得到了一个可以遵循的框架 但我认为我可能误解了一个步骤 这是我所拥有的 function img sampleFB
  • Mocking/Stubbing Mongoose 模型保存方法

    给定一个简单的 Mongoose 模型 import mongoose Schema from mongoose const PostSchema Schema title type String postDate type Date de
  • 如何在fetch-mock中模拟多个获取?

    我正在测试我的反应组件 我想模拟几个get运营 我想做的是这样的 test Created correctly async gt fetchMock get JSON stringify FIRSTGETOBJ fetchMock get
  • 如何使用最小起订量模拟 Controller.User

    我有几个 ActionMethods 查询 Controller User 的角色 如下所示 bool isAdmin User IsInRole admin 在这种情况下可以方便地行事 我开始使用这样的代码对这些方法进行测试 TestMe
  • Sinon.js 结合 CalledWith 次数

    我知道与sinon js https sinonjs org您可以测试间谍是否被呼叫一定次数 sinon assert calledTwice mySpy someMethod 您可以测试是否使用某些参数调用了间谍 sinon assert
  • 在 MATLAB 中高效地形成动态窗口

    有人可以帮助我提供一种有效的方法 或者帮助我执行提供的代码 以尽可能少的步骤获得相同的结果 我将感激你 我有一个原始数组 A 1 1 1 4 3 4 5 4 4 3 3 1 0 0 2 6 2 6 3 6 6 2 7 4 8 7 2 2 2
  • 跨程序集和命名空间的依赖注入

    我正在解决一个 DI 问题 我认为我了解其原因 但我需要一些建议来解决 我构建了一个与 Sql 对话的独立程序集 将此程序集称为 a 以及另一个包含业务逻辑的程序集 将此程序集称为 b 我在 b 程序集中为 db 类创建了一个接口 由于该接
  • TDD中如何处理接口过度使用?

    我注意到 当我进行 TDD 时 它通常会导致大量的接口 对于具有依赖项的类 它们以通常的方式通过构造函数注入 public class SomeClass public SomeClass IDependencyA first IDepen
  • 数组中 2 个百分位之间的平均元素

    我有 2 个长度为 200 的向量 例如 A 和 B 然后我使用以下方法找到数组 A 的每第二个百分位数 A1 prctile A 1 2 100 1 这样A1是一个长度为50的数组 现在我想找到A1中每两个元素内的A元素的平均值 即A的第
  • 存储库本身通常不经过测试?

    抱歉 我对存储库模式 单元测试和 orm 工具还不熟悉 我一直在研究单元测试和存储库模式 并得出一些结论 我想知道我是否正确 存储库模式有助于在使用它的控制器中替换单元测试 例如 对吧 因为创建上下文 在 EF 中 或会话 在 NH 中 的
  • Rhino Mocks - 使用 Arg.Matches

    我有一个正在嘲笑的函数 它接受一个参数对象作为参数 我想根据对象中的值返回结果 我无法比较对象 因为 Equals 未被覆盖 我有以下代码 tourDal Stub x gt x GetById Arg
  • 使用 libsvm 交叉验证后重新训练

    我知道交叉验证用于选择好的参数 找到它们后 我需要在不使用 v 选项的情况下重新训练整个数据 但我面临的问题是 在使用 v 选项训练后 我得到了交叉验证精度 例如 85 没有模型 我看不到 C 和 gamma 的值 在这种情况下我该如何重新
  • 在matlab中设置图例符号的精度

    我有这个 leg2 strcat Max Degree num2str adet 1 1 ch l leg3 strcat Min Degree num2str adet 1 2 ch l leg4 strcat Max Request n

随机推荐