Проблема с nUnit-тестами, связанными с SQLite, после обновления до VS2010 и Re # 5 - PullRequest
4 голосов
/ 22 апреля 2010

После преобразования в Visual Studio 2010 с ReSharper5 некоторые из моих модульных тестов начали давать сбой.Более конкретно это относится ко всем модульным тестам, которые используют NHibernate с SQLite.Проблема, похоже, как-то связана с SQLite.Модульные тесты, не включающие NHibernate и SQLite, по-прежнему работают нормально.

Исключением является следующее:

NHibernate.HibernateException : Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
  ----> System.Reflection.TargetInvocationException : Exception has been thrown by the 
        target of an invocation.
  ----> NHibernate.HibernateException : The IDbCommand and IDbConnection implementation 
        in the assembly System.Data.SQLite could not be found. Ensure that the assembly
        System.Data.SQLite is located in the application directory or in the Global 
        Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element 
       in the application configuration file to specify the full name of the assembly.
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.

Исключением является NullReferenceException в TearDown при очистке объектов NHibernate, которые не были успешно созданы, но проблема, похоже, как-то связана с SQLite,

Я запускаю свои модульные тесты через ReSharper, но я получаю то же исключение при запуске их непосредственно через приложение NUnit.exe.Однако при запуске их через вариант x86 (NUnit-x86.exe) все тесты работают нормально.Может ли это быть связано с некоторым смешением 64-битных и 32-битных DLL?Он все еще работает нормально через VS2008 + ReSharper4.5.

Обратите внимание, что целевой платформой моих проектов по-прежнему является .NET3.5.

Кто-нибудь видел эту проблему раньше?

Ответы [ 4 ]

6 голосов
/ 22 апреля 2010

Кажется, что между 64-битными и 32-битными библиотеками есть путаница. Переход на использование x64 варианта SQLite.dll устраняет проблему. Я не уверен, почему VS2008 не дает этой проблемы, хотя.

3 голосов
/ 22 апреля 2010

Я получил ту же ошибку, я был уверен, что это связано с .NET 4.0 и VS 2010, но когда я обновился до Resharper 5 на работе (на VS 2008), я получил ту же ошибку.

Я думаю, что это вызвано тем, что Resharper 5 Runner. Когда я использовал TestDriven.NET, все они работали успешно.

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

Пока это исправлено, я буду использовать TestDriven.NET для запуска своих тестов. Но я буду скучать по отличному интерфейсу Resharper;)

2 голосов
/ 23 апреля 2010

Вы смотрели настройки компиляции в Visual Studio 2010?

Чтобы скрыть невозможность запустить новейший отладчик в 64-битной среде, Microsoft решила переключить компиляцию по умолчанию для приложений .Net с ANY_CPU на 32-битную x86.

Это может создать ваши проблемы.

0 голосов
/ 17 января 2011

Не удалось создать драйвер из NHibernate.Driver.SQLite20Driver, NHibernate, версия = 2.1.2.4000, культура = нейтральная, PublicKeyToken = aa95f207798dfdb4

Решение:

testsettings: выбрать хостов выбрать запуск тестов в 64-битном процессе на 64-битной машине

надеюсь, что смогу помочь.

веселое кодирование

...