1

问题

我试图在 c# 中创建一个容器数组以作为测试结果传回 TestStand,但似乎没有一种简单的方法来完成这项任务。

动机

在 c# 中List<Dictionary<string,object>>,我的测试系统中包含结果,我希望这些结果显示在我的测试报告中。Dictionary<string,object>具有可变数量的不同类型的元素。

尝试的解决方案

如果给出:

var result = sequenceContext.AsPropertyObject().EvaluateEx(destination, EvaluationOptions.EvalOption_NoOptions);

在哪里

  • sequenceContext 是 NationalInstruments.TestStand.Interop.API.SequenceContext
  • destination 是我希望将结果保存在我的 TestStand 报告中的位置,即 Step.Result.TestResultDestination

我尝试了几种不同的方法来添加容器数组result,例如:

var newPropertyObject = sequenceContext.Engine.NewPropertyObject(PropertyValueTypes.PropValType_Container, true, string.Empty, PropertyOptions.PropOption_InsertIfMissing);
result.SetPropertyObject("TestResultDestination", PropertyOptions.PropOption_InsertIfMissing, newPropertyObject);
result.SetFlags("TestResultDestination", PropertyOptions.PropOption_NoOptions, PropertyFlags.PropFlags_IncludeInReport | PropertyFlags.PropFlags_IsMeasurementValue);

这会将容器数组添加到我的结果中,但是任何将元素插入容器数组的尝试都会导致异常。

想法?

4

1 回答 1

2

我很接近,我错过了几个关键步骤:

 if (!result.Exists("TestResultDestination", 0))
 {
       //once we have added this element do not add it again, it will overwrite the other array elements
       var newPropertyObject = sequenceContext.Engine.NewPropertyObject(PropertyValueTypes.PropValType_Container, true, string.Empty, PropertyOptions.PropOption_InsertIfMissing);
       //for my example I only need 5 elements, set the dimension of the array                                        
       newPropertyObject.SetNumElements(5, 0);
       result.SetPropertyObject("TestResultDestination", PropertyOptions.PropOption_InsertIfMissing, newPropertyObject);
       result.SetFlags(newKey, PropertyOptions.PropOption_NoOptions, PropertyFlags.PropFlags_IncludeInReport | PropertyFlags.PropFlags_IsMeasurementValue);
  }

然后可以通过使用数组语法继续处理数组中的元素,即TestResultDestination[0]存储实际结果。

于 2013-10-04T20:00:59.793 回答