例如,我的simulink模型中有一个Matlab功能块,如下所示:
function define_tests(row rowValues)
for i=1:length(rowValues)
sldv.test(row == rowValues(i));
每次调用sldv.test
时,设计验证程序都不会生成测试。它最后一次调用时只生成一个测试。
有关生成length(rowValues)
测试的可能解决方案的任何想法吗?感谢
答案 0 :(得分:1)
此功能没有输出,也没有影响其父节点功能
没有明确说明,但我假设sldv.test
本身不一定是“执行”或“调用”,而只是作为一种表示所需行为的方式。在分析您的功能时由SLDV使用。我认为sldv.test
并不打算与函数中的控制流混合,因为SLDV实际上并没有执行这个控制流。
另外,考虑一下这样一个事实,即如果要为函数排他地添加新的控制逻辑(例如for循环或if语句),以指定sldv.test
的定义方式,那么这也会无意中添加无关的覆盖目标(例如,你的for循环将具有与之相关的决策覆盖目标)。 (不确定这是否与你的情况有关,但我认为我会把它扔到那里以防万一)
我认为最好的办法是避免在for循环中使用sldv.test
并尝试对测试表达式进行矢量化。使用您的示例,如下所示:
function define_tests(row, rowValues)
sldv.test(all(row == rowValues));
这应该具有指定 rowValues 的所有元素等于行的所需行为。
以下是有关vectorization in MATLAB的更多信息的链接。