Как мне издеваться / подделывать: много ко многим объектам - PullRequest
1 голос
/ 12 января 2010

Так что в моем домене у меня есть 3 объекта. Пользователь, пункт и тег. У каждого пользователя есть элементы и теги, у каждого элемента есть теги, а у каждого тега есть элементы.

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

public class User
{
    public List<Item> Items { get; set; }
    public List<Tag> Tags { get; set; }
}
public class Item
{
     public List<Tag> Tags { get; set; }
}
public class Tag
{
     public List<Item> Items { get; set;}
}

Это первый раз, когда у меня есть go TDD, поэтому мне было интересно, как получить поддельные / фальшивые (не уверенные в правильном термине), которые я могу использовать в своих тестах. Сначала я пытался просто создать несколько поддельных объектов, но со многими для многих это кажется большой работой.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 12 января 2010

Обычно вы создаете интерфейс для всех тех, кто использует эти интерфейсы с фреймворком Mock:

public interface IUser
{
    List<Item> Items { get; set; }
    List<Tag> Tags { get; set; }
}
public interface IItem
{
     List<Tag> Tags { get; set; }
}
public interface ITag
{
     List<Item> Items { get; set;}
}

Если, например, вы используете NMock, вы бы хотели что-то вроде этого:

IUser user = mockery.NewMock<IUser>();
var testTags = new List<ITag.();
user.Expect().Once.On("Tags").Will(Return.Value(testTags));

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

Как всегда, когда вы начинаете с TDD и издевательства, вы должны прочитать эту статью Мартина Фаулера:

http://martinfowler.com/articles/mocksArentStubs.html

0 голосов
/ 14 января 2010

Пользователь, Элемент и Тег не похожи на объекты, они выглядят как структуры, поэтому я просто использовал бы здесь реальные объекты данных, а не макеты. Моды работают лучше, когда они используются для изоляции поведения (прося сотрудничающий объект сделать что-то для вас). Попробуйте взглянуть на книгу Ребекки Уирф-Брокс по объектному дизайну.

0 голосов
/ 12 января 2010

Я не уверен, что полностью понял ваш вопрос. Я думаю, что вы ссылаетесь на макетные / тестовые данные, а не на структуру / методологию TDD?

Если так, я бы посоветовал вам сделать это полуавтоматически.

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

Следующий пункт. Создайте пул из них, ссылающийся на 0 (или 1?) Для N тегов. Возможно, вам придется добавить некоторый случайный элемент или шаблон для вариации.

Наконец, создайте список пользователей. Свяжите их с Предметами и Тегами, аналогично тому, как вы делаете это для Предмета.

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

...