2012-02-20 3 views
0

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

Я пытаюсь избежать любых ошибок с конкретными типами объектов. Например, при тестировании общей структуры словаря я знаю, что методы GetHashCode и Equals очень важны для обеспечения действительного теста. Я волнуюсь, что если я просто использую манекен object экземпляров (var a = new object();), то у меня возникают проблемы с этими методами, которые не являются достаточно прочными.

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

Наконец, есть ли какие-либо другие проблемы, требующие внимания при использовании конкретной реализации объекта (например, object или GUID) вместо общих типов для целей единичного тестирования?

+0

Очень странный вопрос. Проверьте, каким образом? Модульный тест? Это зависит от того, что именно вы тестируете, не так ли? Если вам нужно что-то, что реализует GetHashCode и Equals, то убедитесь, что вы используете что-то, что делает это. Вы просто ищете список типов, которые делают? –

+0

@ KierenJohnstone-I отредактировал мой вопрос, чтобы указать модульное тестирование и, надеюсь, уточнить мои намерения. – dlras2

ответ

2

Если вы хотите быть уверенными, Вы должны проверить с несколькими типами:

  1. типа значения, такие как int
  2. ссылочного типом, который использует ссылочное РАВЕНСТВО
  3. ссылочного тип с переопределяется Equals + GetHashCode
  4. Переходя в IEqualityComparer<T>
  5. double или float для их странной семантики NaN.

Не все испытания должны проводиться для всех них. Но я бы добавил по крайней мере один тест для каждого из них.

+0

+1. Это похоже на то, что я ищу. Как бы вы реализовали «GetHashCode» для ссылочного типа, который использует ссылочное равенство? Кроме того, вы можете объяснить, что вы подразумеваете под странной семантикой NaN? – dlras2

+0

'Как бы вы реализовали GetHashCode для ссылочного типа, который использует ссылочное равенство?' Он уже реализован. Не нужно переопределять. – CodesInChaos

+0

Итак, вы говорите, что реализация 'GetHashCode' по умолчанию использует ссылку на объект? – dlras2

-2

Если вы хотите, чтобы вы тестировали общие коллекции из пространства имен System.Collections, это неправильный подход к тестированию.

Ваш тест должен охватывать только ваш код, но не другие вещи, которые не разработаны вами.

+0

Я разрабатываю собственную библиотеку коллекций, в которой часто используются объекты 'System.Collections'. В любом случае, это, вероятно, комментарий.) – dlras2

+0

Нет, это было предложено ответить, чтобы исправить ваш подход. что оказалось не так. – Tengiz

0

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

class MyObject 
    { 
     public int myPrimaryKey {get; set;} 
     public object myData {get; set;} 
    { 

Тогда все, что вам нужно сделать, это добавить его в ArrayList:

var a = new ArrayList(); 
    a.add(new MyObject{myPrimaryKey = 1, object = 'some value'}); 

Надежда это то, что вы искали.

+0

Почему 'ArrayList'? Маловероятно, что он использует .net 1.x. Я не вижу причин выбирать «ArrayList» над «List », кроме устаревших сценариев. (Или некоторые очень конкретные сценарии) – CodesInChaos

+0

Я не уверен, что вы предлагаете здесь .. Как бы это лучше всего тестировать общие коллекции? – dlras2

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