2013-07-02 11 views
0

Я создал собственный сопоставитель сравнений и провел соответствующие тесты против компаратора.Как издеваться над CustomEqualityComparer

Теперь я пытаюсь издеваться над тем, чтобы класс, который я тестирую, который использует компаратор, не должен проходить в реальной вещи.

Мой метод вызова выглядит следующим образом:

left.Except(right, customEqualityComparer); 

где переменные «влево» и «вправо» два списка любого типа и customEqualityComparer мой обычай равенство Comparer.

Моя проблема в том, что я не знаю, как издеваться над customEqualityComparer, поскольку он все еще должен действовать реалистично.

Я рассматривал создание класса, который содержит метод:

public List<object> LeftExceptRight(customEqualityComparer, left, right){} 

И насмешливый весь метод. Это избыток? Я не вижу других альтернатив.

+0

Скажите, что ваш компаратор является «CustomComparer», имеет ли ваш класс прямую зависимость (т. Е. Вызывает «новый CustomComparer()») или получает его через интерфейс ('IComparer ')? –

ответ

1

Это избыток?

Мне нравится это. Почему вы хотите издеваться над своим компаратором в первую очередь? Он делает что-то особенно трудное с точки зрения тестирования, например, используя внешние веб-службы или базу данных? (Это было бы необычно.)

До тех пор, пока ваш собеседник также тщательно проверен сам по себе, я не вижу проблем с его использованием в тестах для того, что будет использовать его в реальности. Вы не получаете какой-либо существенной пользы от насмешки над этим - на самом деле наоборот. Когда вы используете его в своих тестах, вы также будете эффективно тестировать интеграцию между вызывающим кодом и компаратором ... что они хорошо работают вместе, а не только в одиночку.

Я знаю, что есть те, кто догматически настаивает на том, что модульные тесты действительно должны только проверять ваш код из одного класса за раз ... но прагматизм заставил меня поверить, что, хотя насмешка действительно ценна во многих случаях, это легко выходить за борт с ним - и простой способ просто использовать реальную реализацию часто является способом выхода.

+0

CustomEqualityComparer будет использоваться только для left.except (справа), right.except (слева) и list1.Intersect (list2). Как вы думаете, это потребует собственного тестирования, если я должен создать класс-оболочку для трех методов, принимающих CustomEqualityComparer в конструкторе? Таким образом, весь модуль будет полностью подключаемым. – SamuelDavis

+1

@SamuelDavis: Я осмелюсь сказать, но это не значит, что вы не можете использовать его в тестах для другого класса. Какую пользу, по-вашему, вы извлекли бы из издевательства над этим? –

+0

Извините, случайно нажмите 'enter', только набрав половину моего комментария. Не могли бы вы перечитать мой первоначальный ответ? Если бы у меня был небольшой протестированный класс расширения пользовательского списка, его можно было бы использовать в большем количестве проектов. – SamuelDavis

Смежные вопросы