Pex忽略[PexAssumeNotNull]和PexAssume.AreElementsNotNull()

时间:2015-04-09 12:03:43

标签: visual-studio-2010 pex

我有以下PexMethod:

[PexMethod]
public bool fwAlertConfig_objectConfigExists(
    [PexAssumeUnderTest]WinCC target,
    [PexAssumeNotNull] List<mixed> alertConfigObject,
    [PexAssumeNotNull] ref int configType,
    [PexAssumeNotNull] ref List<string> exceptionInfo
)
{
    PexAssume.TrueForAll(alertConfigObject, x => x.value != null);
    PexAssume.AreElementsNotNull(alertConfigObject);
    bool result
       = target.fwAlertConfig_objectConfigExists(alertConfigObject, ref configType, ref exceptionInfo);
    return result;

}

我故意将[PexAssumeNotNull]PexAssume放在那里。然而, 当我“运行Pex探索”时,似乎忽略了这些东西,这些是创建的输入: PexResults

请注意以下事项:

  • in exceptionInfo在每一行都null,但它有[PexAssumeNotNull]
  • 第2行:alertConfigObject为{null},虽然我定义了PexAssume.AreElementsNotNull(alertConfigObject)
  • 第4行:new mixed{value=null},虽然我定义了 PexAssume.TrueForAll(alertConfigObject, x => x.value != null)

但是:[PexAssumeNotNull]适用于alertConfigObject,因为我不再将null视为输入。 那么为什么其他假设不起作用?

1 个答案:

答案 0 :(得分:1)

我无法对其进行测试,因为您没有提供测试中的代码,但您可以尝试使用静态方法[PexAssumeNotNull]替换PexAssume.IsNotNull属性,就像这样:

   [PexMethod]
   public bool fwAlertConfig_objectConfigExists(
       WinCC target,
       List<mixed> alertConfigObject,
       ref int configType,
       ref List<string> exceptionInfo)
   {
       PexAssume.IsNotNull(target);
       PexAssume.IsNotNull(alertConfigObject);
       PexAssume.IsNotNull(configType);
       PexAssume.IsNotNull(exceptionInfo);

       PexAssume.TrueForAll(alertConfigObject, x => x.value != null);
       PexAssume.AreElementsNotNull(alertConfigObject);
       bool result
          = target.fwAlertConfig_objectConfigExists(alertConfigObject, ref configType, ref exceptionInfo);
       return result;
   }