2016-07-11 4 views
0

Я тестирую функцию с помощью XUnit. Хотя тест правильно выполняет работу по определению существования «System.DateTime» в возвращаемом массиве Type [], я должен сделать это, перейдя через массив. (Зачем проверять существование свойства DateTime, о котором я уже знаю? Поскольку я изучаю TDD, играя с некоторым кодом, с которым я уже знаком.)Можно ли утверждать существование одного или нескольких элементов в массиве без цикла for?

Есть ли функция 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."); 
} 

ответ

2

LINQ делает быструю работу этого:

Assert.True(propertyTypes.Any(n => n == typeof(DateTime))) 
+0

Он отлично работал. –

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." 
);