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" 这些是创建的输入时,似乎这些东西被忽略了:
请注意以下事项:
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 视为输入。
那么为什么其他假设不起作用?
我没法测试,因为你没有提供被测代码,不过你可以试试把[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;
}
我有以下 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" 这些是创建的输入时,似乎这些东西被忽略了:
请注意以下事项:
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 视为输入。
那么为什么其他假设不起作用?
我没法测试,因为你没有提供被测代码,不过你可以试试把[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;
}