2015-10-02 2 views
1

Я создаю тестовое приложение, которое будет сортировать плоский файл в иерархии parent-child. И теперь я хочу создать довольно общий тест для моей собственной сортировки. Для этого я хочу сгенерировать некоторые тестовые данные, которые затем сортирую.Создание иерархии объектов для теста

Объект, который будет отсортирован будет выглядеть примерно так:

public interface IHierarchicalUnitWithChildren 
{ 
    string Id { get; } 
    string ParentId { get; } 
    IList<IHierarchicalUnitWithChildren> Children { get; set; } 
} 

Но я не хочу, чтобы создать тест-объект сам. Я хочу, чтобы это генерироваться код, как таковой:

 _items = new List<IHierarchicalUnitWithChildren>(); 
     Random random = new Random(); 

     for (int i = 1; i < 1000; i++) 
     { 
      var item = new HierarchicalUnitMock() 
      { 
       Oid = i.ToString(), 
       Children = new List<IHierarchicalUnit>(), 
      }; 

      // We need a couple of roots. 
      if (i%100 != 0) 
      { 
       item.Poid = random.Next(1, 100).ToString(); 
      } 

      _items.Add(item); 
     } 

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

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

Или я думаю об этом не так? Должен ли тест всегда иметь статические данные?

UPDATE:

Есть ли способ сделать это с помощью смарт-петли, которые всегда порождают одни и те же данные? Так что тестовый сценарий всегда будет таким же?

ответ

1

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

Вместо:

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

+0

Ну, я готов согласиться с вами. Как вы говорите, тестовый пример не будет одинаковым каждый раз, что является одним из ключевых компонентов тестирования. – smoksnes

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

  • Нет связанных вопросов^_^