带设计验证的Matlab功能块

带设计验证的Matlab功能块,matlab,simulink,Matlab,Simulink,例如,我的simulink模型中有一个Matlab功能块,如下所示: function define_tests(row rowValues) for i=1:length(rowValues) sldv.test(row == rowValues(i)); function define_tests(row, rowValues) sldv.test(all(row == rowValues)); 每次我调用sldv.test,设计验证器都不会生成测试。它最

例如,我的simulink模型中有一个Matlab功能块,如下所示:

function define_tests(row rowValues)
    for i=1:length(rowValues)
        sldv.test(row == rowValues(i));
function define_tests(row, rowValues)
    sldv.test(all(row == rowValues));
每次我调用
sldv.test
,设计验证器都不会生成测试。它最后一次调用时只生成一个测试

对于生成
length(rowValues)
测试的可能解决方案,您有什么想法?谢谢你,上面写着

此函数没有输出,也不会影响其父函数

它没有明确说明,但我假设,
sldv.test
本身并不一定在函数中“执行”或“调用”,而是作为一种表示所需行为的方式,供sldv在分析函数时使用。我推测,
sldv.test
并不打算与函数中的控制流混合,因为sldv实际上并没有执行这个控制流

还考虑这样一个事实,如果您将新的控制逻辑(例如for循环或if语句)添加到函数独占< /强>中,以便指定<代码> SLDV.Test是如何定义的,那么这也会无意地添加额外的覆盖目标。(例如,您的for循环将有与之相关的决策覆盖目标)。(不确定这是否与您的情况相关,但我想我会将其抛在一边以防万一)

我认为您最好的选择是避免在for循环中使用
sldv.test
,并尝试对测试表达式进行矢量化。使用您的示例,它如下所示:

function define_tests(row rowValues)
    for i=1:length(rowValues)
        sldv.test(row == rowValues(i));
function define_tests(row, rowValues)
    sldv.test(all(row == rowValues));
这应该具有指定rowValues的所有元素等于row的所需行为

这里有一个链接,可以链接到有关的更多信息