< Cov'ed Code All through the…<前一 墨西哥人调试。重新定义。>下一个> 应用运动 发布的安迪•坎贝尔,2018年5月11日 39次观看(过去30天)| 0喜欢| 0评论 周五快乐!今天我想向大家介绍史蒂夫·麦克卢尔。史蒂夫是新产品的首席开发人员应用测试框架刚刚在R2018a出版。我们对此非常兴奋!它真正为您的MATLAB应用程序打开了生产开发工作流程。把它拿走,史蒂夫! 如果您设计了一个带有大量选项或配置的工具库,那么GUI可能会使事情变得更加方便。它给了用户一个机会转动那些旋钮去探索,去玩,不关心你的底层API。GUI有成为他们的API,你有义务在改进代码的其他部分时不破坏它。这种维护在历史上归结为手动与GUI交互以确保其正常工作,其说明可能是:选择此下拉项,选中此框,移动滑块,单击绘图按钮,确保它看起来正确。现在,对于你的系统所能提供的每一种变化,重复这一步骤,组合将变得难以承受,并消耗更多的开发时间。在某种意义上,这已经是遗留代码——代码摸起来很吓人,需要一些蛮力比较来确保一切正常。这在很大程度上带来了“如果它没有坏,就不要修复它”的政策,这就是为什么许多gui看起来仍然来自20世纪90年代末。对于R2018a,应用测试框架能帮到你自动化这个过程,给你和你的客户一个高度的信心。 我使用App Designer创建了一个小App来演示经典的质量-弹簧-阻尼器问题: 这是一个非常简单的应用程序:一些数字编辑字段,滑块,一个连续和一个离散旋钮,一个测量仪,和响应图。即便如此,手动检查不同的组合还是需要一些努力,以获得对一切正常工作的良好信心。 在App Designer中,当你导入组件时,它会给App对象添加属性,我们可以很容易地得到这些属性的显示: app = massspring阻尼器 应用= MassSpringDamper属性:UIFigure:[1×1图]UIAxes:[1×1 UIAxes] MassSliderLabel:[1×1标签]MassSlider:[1×1滑块]StiffnessKnobLabel:[1×1标签]StiffnessKnob:[1×1旋钮]LineStyleKnobLabel:[1×1标签]LineStyleKnob:[1×1 DiscreteKnob] DampingSliderLabel:[1×1标签]DampingSlider:[1×1滑块]InitialValuesPanel:[1×1面板]DisplacementEditFieldLabel:[1×1标签]DisplacementEditField:[1×1 NumericEditField] VelocityEditFieldLabel:[1×1标签]VelocityEditField:[1×1 NumericEditField] Gauge: [1×1 semiirculargauge] UnderdampedLabel: [1×1 Label] OverdampedLabel: [1×1 Label] Line: [1×1 Line] 注意,如果我们以编程方式设置值应用程序的“LineStyleKnob”,即 app.LineStyleKnob.Value =“。”; 没有回调。 这在很大程度上是经过设计的,因为我们不希望在用户在幕后设置状态时无休止地触发回调。一个诱人的解决方法是通过feval调用手动调用ValueChangedFcn: E = struct;假事件百分比函数宏指令(@app.LineStyleKnob。ValueChangedFcn, app.LineStyleKnob, e); 我们用过"动态类型一般来说,这很难得到正确的结果:你必须知道它有什么属性,并让这些属性与真实的系统保持完美的内联,否则你就不能测试你的想法。这样做的另一个缺点是它不再尊重视图。例如,您可以在不可见、禁用或被另一个组件遮蔽的组件上调用该回调。因此,如果您以这种方式编写了大量的测试,并且都通过了测试,那么这对最终用户真的有什么意义吗?这些方法让你接近目标,但仍有一些相当大的差距,可能会使整个测试平台变得无用。 在设计应用程序测试框架时,我们仔细研究并解决了这些类型的差距。让我们在命令行上创建一个交互式的TestCase,在App上执行手势: testCase = matlab.uitest.TestCase.forInteractiveUse; 现在我们可以设置线条样式旋钮为“dot虚线”: testCase.choose (app.LineStyleKnob"DotDashed") 我们可以看到直线变成了破折号!让我们使用MATLAB测试框架来编程验证: testCase.verifyEqual (app.Line.LineStyle“-”。) 验证通过。 这可以是我们的第一个测试,只需将代码转移到继承自的基于类的测试matlab.uitest.TestCase: runtestsMyAppTest 运行MyAppTest。完成MyAppTest __________ 名称:'MyAppTest/testLineStyleKnob'通过:1失败:0不完整:0持续时间:2.3008详细信息:[1×1 struct]总计:1通过,0失败,0不完整。2.3008秒测试时间。 现在我们有了一个测试,我们可以在每次触摸应用程序后运行。修复bug?运行测试。添加新功能?运行测试。做测试驱动开发现在让它失败(红色),让它通过(绿色),不要忘记清理(重构)。如果我们足够充实我们的测试平台,一个全绿色的测试套件将使我们在发布应用程序的下一个版本时充满信心。 给超级热情的人一个提示,不要浪费时间去验证这句话看起来虚线样式旋钮指针实际上指向“虚线”标签。你可以相信我们已经写过了吨在MathWorks测试这类事情(与我在这里列出的动机非常相似)。应用程序测试框架旨在帮助你实现自己的回调代码。 你知道应用测试框架在哪些方面可以帮助你的应用程序吗? | 你现在正在关注这篇博文 您将在您的活动提要. 你可能会收到电子邮件,这取决于你的通知偏好. 类别: 应用程序开发, 测试 < Cov'ed Code All through the…<前一 墨西哥人调试。重新定义。>下一个> 另请参阅 泰格,你就是! 博客 GUI布局(第五部分) 博客 多测试一些项目 博客 使用深度学习逐字生成文本 应用测试框架 使用深度学习逐字生成文本 评论 如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。