Main Content

matlab.unittest.plugins.FailOnWarningsPlugin 类

命名空间: matlab.unittest.plugins

当发出警告时令测试失败的插件

描述

FailOnWarningsPlugin 创建的插件在添加到 TestRunner 后,任何测试发出警告都会导致测试失败。该插件会在发出警告的测试范围内生成一个验证失败。例如,如果某共享测试脚手架发出警告,该插件会对该脚手架生成验证失败,并令所有共享该脚手架的测试失败。

在以下条件下,FailOnWarningsPlugin 插件不会导致失败:

  • 测试的警告是因诸如 IssuesWarningsIssuesNoWarnings 之类的约束条件而产生的,与是否满足约束条件无关。

  • 禁用警告时。例如您使用 SuppressedWarningsFixture 禁用了警告。

构造

matlab.unittest.plugins.FailOnWarningsPlugin 会创建一个插件,该插件可在任何测试发出警告时令测试失败。

matlab.unittest.plugins.FailOnWarningsPlugin('Ignoring',warnIDs) 创建的插件在遇到指定的警告标识符 warnIDs 时,不会令测试失败。

输入参数

全部展开

要忽略的警告的标识符,指定为字符向量元胞数组。当测试所发出的警告的标识符包含在 warnIDs中时,插件不会令测试失败。

示例: FailOnWarningsPlugin('Ignoring',{'MATLAB:singularMatrix'})

属性

全部展开

默认情况下,Ignore 属性为空。要将属性指定为字符向量元胞数组,请在构造插件实例时使用 'Ignoring' 语法。

复制语义

句柄。要了解句柄类如何影响复制操作,请参阅复制对象

示例

全部折叠

创建 solve 函数来对一组线性方程求解。在 solve 函数中故意放置一处错误 - 检查矩阵是否为奇异的 assert 调用应当使用 rcond,而不是 det

function x = solve(A,b)

assert(abs(det(A)) > 1e-12,... % intentional bug for illustrative purposes
    'The matrix is singular or nearly singular'); 

x = A\b;

创建以下测试类。在 testTwo 中,A 矩阵是奇异的,但因为在 solve 函数中有错误,所以 assert 调用无法捕获它。

classdef TestSolve < matlab.unittest.TestCase
    
    methods(Test)
        function testOne(testCase)
            A = eye(3);
            b = [3; 4; 1];
            testCase.verifyEqual(solve(A,b),b);
        end

        function testTwo(testCase)
            A = [1e-100 0; 0 1e100];
            b = [5; 5];
            expX = [5e100 5e-100];
            testCase.verifyEqual(solve(A,b),expX);
        end
    end
end

在命令提示符下,创建测试套件和测试运行器。

import matlab.unittest.TestRunner;
import matlab.unittest.TestSuite;
import matlab.unittest.plugins.FailOnWarningsPlugin;

suite = TestSuite.fromClass(?TestSolve);
runner = TestRunner.withTextOutput;

添加 FailOnWarningsPlugin 插件,并运行测试。由于 solve 函数发出警告,导致 testTwo 失败。如果没有 FailOnWarningsPluginsolve 函数仍会发出警告,但这两个测试都会通过。

runner.addPlugin(FailOnWarningsPlugin);
result = runner.run(suite);
Running TestSolve
.Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
.
================================================================================
Verification failed in TestSolve/testTwo.

    ---------------------
    Framework Diagnostic:
    ---------------------
    TestSolve/testTwo issued warnings:    
        
        ---------------------------
        MATLAB:nearlySingularMatrix
        ---------------------------
        Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
            In C:\work\solve.m (solve) at 6
            In C:\work\TestSolve.m (TestSolve.testTwo) at 14

    ------------------
    Stack Information:
    ------------------
    In C:\Program Files\MATLAB\R2015b\toolbox\matlab\testframework\+matlab\+unittest\+plugins\FailOnWarningsPlugin.m (FailOnWarningsPlugin.teardownTestMethod) at 164
================================================================================

Done TestSolve
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     TestSolve/testTwo    X                 Failed by verification.

提示

  • 使用 warning 函数设置警告堆栈跟踪显示。例如,warning('off','backtrace')

  • 使用 SuppressedWarningsFixture 类禁用警告。

版本历史记录

在 R2015b 中推出