2016-07-26 2 views
6

Итак, мне нужно создать единичный тест для извлечения данных, объект, который я хочу получить, довольно большой. У меня есть хранилища с «GetbyId» (там мы получаем извлечения данных и отображения). я понял, что было бы лучше, чтобы создать 2 модульных тестов:C# Unit Test: извлечение данных из репозитория

  1. Получить из DataObject
  2. Mapping в моей модели

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

Кто-нибудь знает, как Я могу лучше проверить трансформер?

Пс: Я знаю, я вполне могу объяснить, что плохо, извините за это.

EDIT:

Вот пример: Поскольку IContact в Person я не могу сериализовать его, так что я не знаю, как проверить это легко (эта модель является примером реального около 200 строк большой без считая дочерние строки из интерфейсов)

public Person: IPerson 
{ 
    public Name {get; set;} 
    public IContact {get; set;} 
} 

public Contact: IContact 
{ 
    public Phone {get; set;} 
} 
+2

Можете ли вы добавить фрагмент своего класса модели и класс репозитория? Будет легче подумать об этом :) –

+0

Я почти всегда использую формат Json.NET и JSON вместо XML, он намного более гибкий и также более легкий для чтения (что неплохо, когда дело доходит до тестирования). –

+0

, так что вопрос в том, как сравнить ожидаемый объект с фактическим? –

ответ

0

Обычно я использую Compare.net для таких случаев:

//arrange: 
var expected = new Person{ Name = "Alice", Contact = new Contact(){Phone = ""}}; 
CompareLogic compareLogic = new CompareLogic(); 

//act: 
var result = target.GetbyId(1); 

//assert: 
Assert.IsTrue(compareLogic.Compare(expected, result).AreEqual); 

Другой вариант заключается в использовании Fluent Assertions (для полного раскрытия информации у меня нет опыта работы с этим инструментом ...)

Еще одна опция - создать вспомогательный метод для утверждения, а затем повторно использовать его в каждом тесте.