2009-10-08 4 views
2

У меня есть приложение asp.net mvc, в котором используется база данных пользователей по умолчанию. Все это работает очень хорошо, но я хотел бы создать для него несколько тестов. У меня есть тестовый проект, я сразу же наткнетесь на исключениеНе удалось подключиться к DB при тестировании

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid. 

Но строка соединения прекрасно работает (по крайней мере, в web.config в MVC проекта). Исключение выбрано моим логическим логическим элементом логики Entity DB

public ASPNETDBEntities() : 
      base("name=ASPNETDBEntities", "ASPNETDBEntities") 
{ 
    this.OnContextCreated(); 
} 

Любые идеи? Спасибо заранее.

ответ

2

Проблема заключается в том, что при запуске модульных тестов вам необходимо установить строку подключения в файле App.config тестового проекта, чтобы Entity Framework смог его найти.

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

Третий возможный сценарий заключается в том, что вы выполняете интеграцию и, таким образом, хотите получить доступ a реальный db при тестировании - однако он не обязательно должен быть real db. Это может быть любой db с той же схемой базы данных. Я бы рекомендовал настроить dummy db с некоторыми фиктивными записями в нем, которые вы можете выполнить с помощью тестов (и которые вы помещаете в строку в файле App.config в тестовом проекте), которые не будут расти и замедляться, когда «real» db делает.

+0

Что делать, если это сценарий во втором абзаце, где контекст фактически издевается, но вы хотите использовать атрибуты контекста базового объекта в макет-объекте? Можете ли вы просто ввести строку mock connection в app.config? – devlord

+0

@lorddev: Я не совсем понимаю, о каком сценарии вы пытаетесь описать, но если вы не можете отправить «простой» макет-объект, настроенный на то, чтобы вернуть все, что вы ожидаете, когда вы с ним взаимодействуете , то вы, вероятно, не достигли четкого разделения ваших слоев - другими словами, вам следует, вероятно, рассмотреть возможность реорганизации вашего кода, чтобы было легче протестировать. –

+0

Я надеялся получить доступ к ObjectStateManager в отключенном контекстном макете. Оказывается, он встроен в EF и зависит от фактического объекта ObjectContext, который не может быть создан без действительной строки подключения EF. – devlord

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