Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

通过 CAN 实现基于类的汽车算法单元测试

以下示例说明如何使用 Vehicle Network Toolbox™ 和基于 MATLAB 类的单元测试框架来验证巡航控制算法的输出。

它使用 MATLAB® 单元测试类 tCruiseControlAlgorithmVerifier.m 通过控制器局域网 (CAN) 向巡航控制算法的 Simulink® 模型提供输入命令以触发算法的功能性行为,然后通过 CAN 接收来自模型的反馈并验证算法的预期行为。它还生成测试结果的 PDF 报告,可用于进行分析。有关如何编写测试类的详细信息,请参阅 tCruiseControlAlgorithmVerifier.m 文件。该类中的对话框可帮助您理解测试类的设置方法以及每个单独测试的作用。

此示例使用 MathWorks® 虚拟 CAN 通道与算法进行通信。

Simulink 模型概述

巡航控制算法模型中有一个 Virtual CAN Inputs 模块,该模块使用 CAN Configuration 模块进行 CAN 通道设置,并使用 CAN Receive 模块接收从 MATLAB 测试类发出的指令报文。然后,它使用 CAN Unpack 模块从接收到的 CAN 报文中分离出各个信号,再将这些信号转换为适当的数据类型,并传输到实际的巡航控制算法。

Cruise Control Algorithm 模块包含巡航控制算法状态机,它用 Stateflow® 图表示。此算法基于从 Virtual CAN Inputs 模块接收的输入进行工作,并设置为当输入条件达到特定条件时触发。Stateflow 图的输出是预期的车辆巡航速度和算法接合状态。

Virtual CAN Outputs 模块使用 CAN Pack 模块将各信号加载到单个 CAN 报文中,这些信号随后通过 CAN Transmit 模块传输到 CAN 总线上。MATLAB 测试类使用此反馈报文来验证算法输出。

创建测试套件

创建一个要运行的测试类套件。在此示例中,tCruiseControlAlgorithmVerifier.m 是套件中的唯一测试。您可以在同一测试套件中添加其他测试。1×N 测试数组列出测试的数量,而不是测试类的数量。

suite = testsuite("tCruiseControlAlgorithmVerifier")
suite = 
  1x3 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
    0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

创建测试运行器

创建一个测试运行器,以在测试套件中执行一组测试。下面的语句定义了没有特殊插件的运行器。

runner = matlab.unittest.TestRunner.withNoPlugins
runner = 
  TestRunner with properties:

    ArtifactsRootFolder: "/tmp/Bdoc23b_2361005_1548966"
       PrebuiltFixtures: [1x0 matlab.unittest.fixtures.Fixture]

创建 PDF 报告输出

设置要在其中捕获输出的 PDF 文件的名称。

pdfFile = "CruiseControlAlgorithmTestReport.pdf"
pdfFile = 
"CruiseControlAlgorithmTestReport.pdf"

在您的测试运行器中添加一个 PDF 创建插件。首先,构造该插件。

plugin =  matlab.unittest.plugins.TestReportPlugin.producingPDF(pdfFile)
plugin = 
  PDFTestReportPlugin with properties:

     IncludeCommandWindowText: 0
    IncludePassingDiagnostics: 0
                 LoggingLevel: Terse
                        Title: "MATLAB® Test Report"
              PageOrientation: 'portrait'

将此插件与测试运行器相关联,以在工作目录中生成 PDF 报告。

runner.addPlugin(plugin)

运行测试

使用测试运行器运行测试套件。

result = runner.run(suite)
Generating test report. Please wait.
    Preparing content for the test report.
    Adding content to the test report.
    Writing test report to file.
Test report has been saved to:
 /tmp/Bdoc23b_2361005_1548966/tp60a7197f/vnt-ex21299704/CruiseControlAlgorithmTestReport.pdf
result = 
  1x3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 1 Failed, 0 Incomplete.
   103.959 seconds testing time.

分析 PDF 报告

打开用定义的名称创建的 PDF 文件。默认设置会在当前工作目录中创建它。在 PDF 报告中需要注意两项:

总体结果和结果饼图

总体结果根据所有测试是否通过来说明最终结果。饼图显示定义的测试总数中通过和失败的测试数量。

失败摘要详细信息

失败摘要显示哪个测试失败,原因是什么。

点击失败名称右侧的详细信息选项卡可提供详细的失败原因,以及您在测试中配置的诊断报文。