Как вы проверяете, что IEnumerable<SomeClass> содержит все элементы класса SomeClass в MbUnit?
-
22-08-2019 - |
Вопрос
Как вы проверяете, что IEnumerable содержит все элементы класса SomeClass в MbUnit?
Однажды я использовал фреймворк модульного тестирования Visual Studio и обнаружил CollectionAssert.AllAreInstancesOfType
или что-то, чтобы проверить это.
Но как мне это сделать в MbUnit?
Решение
Я ничего не видел в MbUnit CollectionAssert
Класс, который мог бы помочь вам здесь
Однако вы можете легко написать свой собственный (непроверенный).
public class MyCollectionAssert
{
public void CollectionAssert(IEnumerable source, Predicate<object> assertion)
{
foreach(var item in source)
{
Assert.IsTrue(assertion(item));
}
}
public void AllAreInstancesOfType(IEnumerable source, Type type)
{
return CollectionAssert(source, o => o.GetType() == type);
}
}
Я предполагаю, что вы на самом деле имеете в виду IEnumerable, а не IEnumerable<SomeClass>
для которого компилятор обеспечивает безопасность типов.Чтобы использовать этот метод расширения, вызовите:
MyCollectionAssert.AllAreInstancesOfType(myList, typeof(SomeClass));
Другие советы
Джефф Браун, ведущий разработчик проекта Gallio открыл проблема за эту просьбу.Мы собираемся реализовать несколько специальных утверждений: Assert.ForAll
и Assert.Exists
.Они должны быть доступны в следующем выпуске Gallio / MbUnit (v3.1), но вы сможете использовать их раньше, загрузив ежедневную сборку через несколько дней (следите за обновлениями).
Редактировать:
Начиная с Gallio/MbUnit v3.1.213, вы можете использовать Assert.ForAll<T>(IEnumerable<T>, Predicate<T>)
.
[Test]
public void AllMyObjectsShouldBeStrings()
{
var list = GetThemAll();
Assert.ForAll(list, x => x.GetType() == typeof(string));
}