Re[5]: юниттест отражения .Net
От: Lloyd Россия  
Дата: 14.03.11 12:15
Оценка: 4 (1)
Здравствуйте, Aggtaa, Вы писали:

L>>Вы сами выделили отдельный элемент функциональности, который вы хотите оттестировать — фильтрацию типов. Вот это и вынесите в отдельный метод и оттестируйте его. Сигнатура: IEnumerable<Type> -> IEnumerable<Type>.

A>Так?
A>
A>        private static IEnumerable<Type> GetAssemblyProviderTypes(IEnumerable<Type> types)
A>        {
A>            foreach (Type type in types)
A>                if ((type.GetInterface(typeof(IActionProvider).FullName) != null)
A>                        && (type.GetConstructor(new Type[0]) != null))
A>                    yield return type;
A>        }
A>


Или
return types.Where(IsValidType);


A>Для тестирования придется этот метод делать public или хотя бы internal. Вытаскивать с мясом наружу кусок логики неправильно, мне кажется. И ведь я хочу протестировать еще и загрузку. Типа "валидно написанные классы валидно загружаются, невалидно написанные и левые классы не загружаются".


Ну, как не крути, а необходимость тестировать все-таки вынуждает иначе подходить к проектированию. От этого не уйти.

A>Но это мелочи по сравнению с public логикой. Мне неинтересно тестировать маленький аспект работы кода в отдельных 3 строчках.

A>Мне нужно убедиться, что вся публичная функциональность этого кода ведет себя предсказуемо, повторяемо и правильно. В этом же смысл юниттестирования?

Это нормально. SRP.

A>>>И еще возник вопрос. Как быть, если само существование тестов уже влияет на поведение тестируемого кода?

L>>Просто вынесите код тестов в отдельную сборку.
A>Сборка с тестами все равно будет загружена в домен на момент выполнения теста.

Ну так только на момент выполнения теста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.