Должен ли я создать интерфейс и макет этого класса - PullRequest
0 голосов
/ 12 января 2009

У меня есть этот класс с именем Table:

class Table
{
    public string Name
    {
        get
        {
            return this.wrapper.Eval(//some command); 
            //wrapper is pass in by the ctor and is a COM object.
        }
    }
}

который используется в этом классе:

class Map
{
  public Map MapTable(Table table)
  {
     return new Map(table.Name);
  }
}

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

Я думал что-то вроде этого

 Test()
 {
   Mock<ITable> mocktable = new Mock<ITable>(//pass in the wrapper object);
   mocktable.ExpectGet(n => n.Name).Returns("Hello World");

   ITable table = mocktable.object;
   Map mymap = Map.MapTable(table);
 }

Это было бы правильно?

Ответы [ 3 ]

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

Да ваш образец выглядит нормально, если вы хотите проверить объект Map, вы должны насмехаться над объектом Table.

Если вы сделаете это наоборот, вы не будете тестировать конструктор Map.

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

Помимо того факта, что обычно не существует одного идеального решения для тестирования, я бы сначала пошел на макет COM-объекта: должен быть доступен интерфейс, и вы, вероятно, захотите проверить все "выше "это.

Если Table содержит нетривиальный код (например, внутри Eval(); что-либо с условными выражениями или, например, синтаксический анализ с использованием Culture), вы можете захотеть использовать его, как показано в вашем примере.

0 голосов
/ 21 мая 2009

Чтобы помочь мне понять. Похоже, вы просто хотите имя из таблицы, а не сама таблица. В таком случае, почему бы просто не ввести имя и не включать в него таблицу?

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