单元测试 Modelica 组件库?
Unit testing Modelica component library?
我正在 Modelica 中创建组件库,希望能提供一些有关单元测试包技术的信息。
到目前为止,我有一个测试包,由一组模型组成,每个组件一个。每个测试模型实例化一个组件,并将其连接到一些非常简单的助手 类,提供必要的输入和输出。
这在 OMEditor 中以交互方式使用时效果很好,但我正在寻找具有 pass/fail 标准等的更自动化的解决方案。
我应该开始编写 .mos 脚本,还是有 another/better 方式?
谢谢。
编写 .mos
脚本是一种方法,但 Michael Tiller 也提供了一个小型概念验证库:XogenyTest 您可以将其用作基础。
我更喜欢使用 .mos
脚本,当您将测试框架进一步集成到持续集成工具中时,它的效果非常好。 BuildingPy 就是一个很好的例子,虽然它没有在 CI 工具中实现,但它仍然是一个很好的工具。
这里有一个好的框架设计参考:
UnitTesting: A Library for Modelica Unit Testing
如果您有 Mathematica 和 SystemModeler,您可以 运行 来自 Mathematica 的模拟并使用 VerificationTest
"function" 来测试:
VerificationTest[Abs[WSMSimulate["HelloWorld"]["x", .1] - .90] < .01]
。
然后可以在 TestReport[]
.
中模拟多个测试
我喜欢 Openmodelica 测试结果的样子,请参阅
- https://test.openmodelica.org/libraries/MSL_3.2.1/BuildModelRecursive.html
- 点击红色单元格:https://test.openmodelica.org/libraries/MSL_3.2.1/files/Modelica.Electrical.Analog.Examples.AD_DA_conversion.diff.html
- 为失败信号选择"javascript":https://test.openmodelica.org/libraries/MSL_3.2.1/files/Modelica.Electrical.Analog.Examples.AD_DA_conversion.diff.resistor.v.html
虽然不知道他们是怎么做到的。显然进行了某种回归测试,存储了以前的结果,但不知道这是来自某个测试库还是 self-made.
总的来说,我觉得有点 sad/suboptimal,没有 "the one" 每个人 can/should 使用的测试解决方案(参见 [=77= 中的 nose 或 pytest) ] 生态系统),相反,每个人似乎都在编造自己的解决方案(或试图编造自己的解决方案),而您所找到的只是一些 Modelica 会议论文(通常没有实现的痕迹)或状态不明的未维护库。
在我的脑海中,我 found/know 的(有些已经链接到这里的其他答案中)
- OM testing
- JModelica testing(好像只测试编译器错误?)
- Xogeny test(库本身的一些测试对我来说失败了。另外,似乎不包括测试运行器)
- MoUnit(Fraunhofer 的东西,未公开 - 可能在 OneWind/OneModelica?)
- UnitTesting(显然是 XogenyTest 的某种前身。另外,没有找到 sources/implementation)
- Optimica Testing Toolkit (apparently a commercial product by Modelon)
- SystemModeler VerificationTest
- buildingspy Python package, for regression testing等等。在伯克利 Modelica 建筑图书馆的保护下。 (仅使用 Dymola 进行模拟)
- Modelica_Requirements 库 -- 定义模拟要求。 (声称是开源和实现的,但显然在任何地方都不可用)
- ...我确定还有更多我忘记或不知道的
这似乎是 https://xkcd.com/927/ 的病态实例。 (non-dev) 用户几乎不可能知道选择哪个,实际上是 good/usable/available/...
(不是真正的测试,但也相关:使用 ANTLR 进行解析和语义分析:modelica.org/events/Conference2003/papers/h31_parser_Tiller. pdf)
我正在 Modelica 中创建组件库,希望能提供一些有关单元测试包技术的信息。
到目前为止,我有一个测试包,由一组模型组成,每个组件一个。每个测试模型实例化一个组件,并将其连接到一些非常简单的助手 类,提供必要的输入和输出。
这在 OMEditor 中以交互方式使用时效果很好,但我正在寻找具有 pass/fail 标准等的更自动化的解决方案。
我应该开始编写 .mos 脚本,还是有 another/better 方式?
谢谢。
编写 .mos
脚本是一种方法,但 Michael Tiller 也提供了一个小型概念验证库:XogenyTest 您可以将其用作基础。
我更喜欢使用 .mos
脚本,当您将测试框架进一步集成到持续集成工具中时,它的效果非常好。 BuildingPy 就是一个很好的例子,虽然它没有在 CI 工具中实现,但它仍然是一个很好的工具。
这里有一个好的框架设计参考: UnitTesting: A Library for Modelica Unit Testing
如果您有 Mathematica 和 SystemModeler,您可以 运行 来自 Mathematica 的模拟并使用 VerificationTest
"function" 来测试:
VerificationTest[Abs[WSMSimulate["HelloWorld"]["x", .1] - .90] < .01]
。
然后可以在 TestReport[]
.
我喜欢 Openmodelica 测试结果的样子,请参阅
- https://test.openmodelica.org/libraries/MSL_3.2.1/BuildModelRecursive.html
- 点击红色单元格:https://test.openmodelica.org/libraries/MSL_3.2.1/files/Modelica.Electrical.Analog.Examples.AD_DA_conversion.diff.html
- 为失败信号选择"javascript":https://test.openmodelica.org/libraries/MSL_3.2.1/files/Modelica.Electrical.Analog.Examples.AD_DA_conversion.diff.resistor.v.html
虽然不知道他们是怎么做到的。显然进行了某种回归测试,存储了以前的结果,但不知道这是来自某个测试库还是 self-made.
总的来说,我觉得有点 sad/suboptimal,没有 "the one" 每个人 can/should 使用的测试解决方案(参见 [=77= 中的 nose 或 pytest) ] 生态系统),相反,每个人似乎都在编造自己的解决方案(或试图编造自己的解决方案),而您所找到的只是一些 Modelica 会议论文(通常没有实现的痕迹)或状态不明的未维护库。
在我的脑海中,我 found/know 的(有些已经链接到这里的其他答案中)
- OM testing
- JModelica testing(好像只测试编译器错误?)
- Xogeny test(库本身的一些测试对我来说失败了。另外,似乎不包括测试运行器)
- MoUnit(Fraunhofer 的东西,未公开 - 可能在 OneWind/OneModelica?)
- UnitTesting(显然是 XogenyTest 的某种前身。另外,没有找到 sources/implementation)
- Optimica Testing Toolkit (apparently a commercial product by Modelon)
- SystemModeler VerificationTest
- buildingspy Python package, for regression testing等等。在伯克利 Modelica 建筑图书馆的保护下。 (仅使用 Dymola 进行模拟)
- Modelica_Requirements 库 -- 定义模拟要求。 (声称是开源和实现的,但显然在任何地方都不可用)
- ...我确定还有更多我忘记或不知道的
这似乎是 https://xkcd.com/927/ 的病态实例。 (non-dev) 用户几乎不可能知道选择哪个,实际上是 good/usable/available/...
(不是真正的测试,但也相关:使用 ANTLR 进行解析和语义分析:modelica.org/events/Conference2003/papers/h31_parser_Tiller. pdf)