我正在使用XUnit测试一个函数。虽然测试正确地完成了识别" System.DateTime"的存在的工作。在返回的Type []数组中,我必须通过遍历数组来完成。 (为什么测试我已经知道的DateTime属性的存在?因为我正在通过玩一些我已经熟悉的代码来学习TDD。)
是否有Assert函数可以确认数组中是否存在元素?我在问问题,因为虽然它有效但我不知道是否有更多有效或紧凑的方法来做这个,除了循环数组。
我希望Assert中有一个无法记录的功能,我可以利用它。
/// <summary>
/// This tests the "GetPropertyTypes(PropertyInfo[] properties)" function to
/// confirm that any DateTime properties in the "TestClass" are confirmed as existing.
/// </summary>
[Fact]
public void ConfirmDateTimePropertiesInModelExist()
{
// Arrange
PropertyInfo[] propertiesInfos = typeof(TestClass).GetProperties();
int dateTimeCount = 0;
// Act
// The names array the list of property types in "TestClass"
Type[] propertyTypes = ExportToExcelUtilities.GetPropertyTypes(propertiesInfos);
for (int i = 0; i < propertyTypes.Length; i++)
if (propertyTypes[i] == typeof(DateTime))
dateTimeCount++;
// Assert
// Assert that the names array contains one or more "System.DateTime" properties.
Assert.True(dateTimeCount>0,
"Existing DateTime properties were not identified in the class.");
}
答案 0 :(得分:2)
LINQ快速完成了这项工作:
Assert.True(propertyTypes.Any(n => n == typeof(DateTime)))
答案 1 :(得分:1)
您不一定需要自定义断言,因为您可以在Assert.True()
中使用标准数组命令。
例如,您可以使用Array.FindIndex()
。
var index = Array.FindIndex(propertyTypes, t => t == typeof(DateTime));
如果索引大于-1,则找到一个项目。所以在断言中使用它:
Assert.True(
Array.FindIndex(propertyTypes, t => t == typeof(DateTime)) > -1,
"Existing DateTime properties were not identified in the class."
);