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

Pex ignores [PexAssumeNotNull] and PexAssume.AreElementsNotNull()

我有以下 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 放在那里。然而, 当我 "Run Pex explorations" 这些是创建的输入时,似乎这些东西被忽略了:

请注意以下事项:

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

我没法测试,因为你没有提供被测代码,不过你可以试试把[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;
   }