开发区域

高级软件开发与MATLAB

吃秘制酱汁的其他方法

在今天的博客中,我想介绍一下斯蒂芬·卡特。Stephen是MATLAB测试框架团队的一名工程师,在过去的几个版本中,他参与了许多令人兴奋的新特性(他还在继续致力于更多的新特性!)Stephen很高兴能写一两篇文章来给您一些提示,以帮助您的测试诊断工作流程。

正如安迪在最近的帖子在美国,我们试着烹饪我们的秘密酱汁,让它的味道恰到好处。但是味道就是一切吗?例如,虽然苏斯博士的《绿鸡蛋和火腿》中的山姆意识到,他实际上喜欢在船上、与山羊一起、在雨中、在火车上吃鸡蛋,但我个人不同意山姆的观点。即使它们在船上或火车上很享受,我也不想让它们和山羊在一起或在雨中。

我想说的是:除了增强诊断本身,我们认识到,如果要让诊断对具有不同偏好和用例的用户有用,还需要不断为用户提供其他方式来使用我们的诊断。我们的最近的帖子演示了使用持续集成用例的诊断方法。但是还有更多的用例需要考虑。

首先,让我从一个你们可能会联想到的场景开始。您刚刚对源代码做了一些最后的更改,并且已经运行了一些单元测试,以便在提交更改之前能够运行完整的测试套件。你运行整个套件使用runtests这个过程大概需要5到10分钟,之后你会发现有一些问题需要解决。从MATLAB命令窗口,您向上滚动并找到您的第一个故障诊断,在阅读它之后,您尝试在命令窗口进行一些操作,以帮助您更好地理解故障。然后当然,你会像往常一样,在命令窗口玩完之后,你会输入clc清除窗口

等待……什么……噢,不!您刚刚丢失了整个诊断输出,甚至还没有读取其他故障的诊断消息。此时您会想,“我真的需要重新运行整个套件来查找失败吗?”

在重新运行整个测试套件之前,首先检查是否仍然有TestResult输出runtests生产。

在R2016a之前,你会看到:

results = 1x1151 TestResult数组,属性为:Name Passed Failed Incomplete Duration总计:1148 Passed, 3 Failed, 0 Incomplete. 266.5616 seconds testing time。

您会注意到通过/失败信息是可用的。您可以使用此功能缩小测试套件,以便只需要重新运行未通过的测试:

didNotPassResults =结果(~ [results.Passed]);testsToRerun = {didNotPassResults.Name};runtests (testsToRerun);把诊断结果给我!

从R2016a开始,我们为这个问题提供了更有效的解决方案,以一种新的方式为您提供诊断服务。现在您将看到以下内容TestResult显示:

结果
results = 1×1151 TestResult数组,属性为:Name Passed Failed Incomplete Duration Details总计:1148 Passed, 3 Failed, 0 Incomplete. 261.3082 seconds testing time。

你看到什么新鲜事了吗?我给你一分钟....现在看到区别了吗?啊,是的,新的细节财产。让我们来看看第一个失败结果的细节:

firstFailingIndex =找到([results.Failed], 1);firstFailingDetails =结果(firstFailingIndex)。细节
firstFailingDetails = struct with fields:
firstFailingDetails。DiagnosticRecord
ans = QualificationDiagnosticRecord with properties: TestDiagnosticResult: {1×1 cell} FrameworkDiagnosticResult: {'Negated IsSubsetOf failed....'}堆栈(1×1结构):事件:“VerificationFailed”范围:“ATitanicTest / testAvoidanceSystem”报告 : '==========================================...'
firstFailingDetails.DiagnosticRecord.Report
答  = ================================================================================ 验证失败ATitanicTest / testAvoidanceSystem。---------------- 测试诊断 : ---------------- 让我们尽量避免触及事情可能在灾难结束。--------------------- 框架的诊断 : --------------------- 否定IsSubsetOf失败了。——>实际值是被禁止的超集的子集。实际值(细胞):“冰山”禁止超集(细胞):“土地”“冰山”“船 ' ------------------ 堆栈信息 : ------------------ H: MATLAB \ SecretSauce \ ATitanicTest \ \文件。在5米(ATitanicTest.testAvoidanceSystem)  ================================================================================

如你所见,runtests现在捕获失败的诊断TestResult输出。这背后的驱动力实际上是一种新的DiagnosticsRecordingPlugin.手动添加这个插件可以为用户提供更多选项,比如记录传递的诊断信息,以及控制记录的诊断信息的冗长程度。

例如,要记录通过的诊断信息,您可以执行以下操作:

进口matlab.unittest.TestRunner;进口matlab.unittest.plugins.DiagnosticsRecordingPlugin;跑步者= TestRunner.withTextOutput;插件= DiagnosticsRecordingPlugin (“IncludingPassingDiagnostics”,真正的);runner.addPlugin(插件);结果= runner.run (testsuite);

现在我们可以找到第一个经过的诊断记录:

allDetails = [results.Details];(allDetails allDiagnosticRecords =。DiagnosticRecord] passedRecords = selectPassed(allDiagnosticRecords) passedRecords(1)查看第一个传递事件的记录
allDiagnosticRecords = 1×1148 QualificationDiagnosticRecord array with properties: TestDiagnosticResult FrameworkDiagnosticResult Stack Event Scope ReportTestDiagnosticResult FrameworkDiagnosticResult Stack Event Scope Report ans = qualiationdiagnosticrecord with properties: TestDiagnosticResult: {} FrameworkDiagnosticResult: {'IsEqualTo passed.... . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf'}堆栈(1×1结构):事件:“VerificationPassed”范围:“CapitalGroupStrategyTest / testStockTicker”报告 : '==========================================...'
passedRecords(1)。报告
答  = ================================================================================ 验证传入CapitalGroupStrategyTest / testStockTicker。--------------------- 框架的诊断 : --------------------- IsEqualTo过去了。——> StringComparator过去了。——>字符数组相等(忽略大小写)。实际字符:Goog预期字符:Goog ------------------堆栈信息:------------------在H:\Documents\MATLAB\SecretSauce\CapitalGroupStrategyTest。在5米(CapitalGroupStrategyTest.testStockTicker)  ================================================================================

请继续关注更多食用我们秘制酱汁的方法。




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。