Интеграционные тесты ASP.NET - TestDrive.net не будет их запускать, другие тестировщики - PullRequest
2 голосов
/ 21 октября 2011

У меня недавно были проблемы с интеграционными тестами после того, как я обновил свое решение до .NET 4.0 - ответ на этот вопрос заключался в том, чтобы получить 64-битную версию System.Data.SQLite.dll.

Я понял это, но у меня есть связанная проблема. Мои интеграционные тесты выполняются, когда я использую тестовый прогон Resharper, но при использовании тестового тестера TestDriven.NET возникает исключение:

Test 'MyApp.IntegrationTests.DataAccess.Providers.ContactFormSubmissionProviderTest.CanFetchContactFormSubmissionById' failed:
    System.TypeInitializationException : The type initializer for 'MyApp.DataAccess.NHibernate.SessionManager' threw an exception.
  ----> NHibernate.HibernateException : Could not create the driver from NHibernate.Driver.SQLite20Driver.
  ----> 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.
    at MyApp.DataAccess.NHibernate.SessionManager.OpenSession()
    DataAccess\Providers\ContactFormSubmissionProviderTest.cs(28,0): at MyApp.IntegrationTests.DataAccess.Providers.ContactFormSubmissionProviderTest.CanFetchContactFormSubmissionById()
    --HibernateException
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
    at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
    at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
    at NHibernate.Cfg.Configuration.BuildSettings()
    at NHibernate.Cfg.Configuration.BuildSessionFactory()
    NHibernate\SessionManager.cs(18,0): at MyApp.DataAccess.NHibernate.SessionManager..cctor()
    --TargetInvocationException
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at System.Activator.CreateInstance(Type type)
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
    --HibernateException
    at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName)
    at NHibernate.Driver.SQLite20Driver..ctor()

изображение: Exception, D'oh!

Я также попробовал решение в по этой ссылке ; это не помогло Как я могу запустить свои тесты из Testdriven.Net?

UPDATE:

Мой проект настроен как Любой ЦП, Платформа выпуска.

Моя ОС - Windows 7, 64-разрядная. Я связывался как с x86, так и с x64 версиями SQLite. Объяснение:

Мое решение имеет несколько проектов - DataAccess, IntegrationTests, Core и UI. Все это проекты .net 4.0, и все они являются библиотеками классов, за исключением UI, который является проектом MVC 3.0. Я использую nUnit 2.4.8.0. Мой уровень DataAccess использует NHibernate.

  • Мой проект пользовательского интерфейса ссылается на 1.0.60.0 (в противном случае я не могу запустить свое приложение из VS2010).
  • Мой проект IntegrationTests ссылается на 1.0.74.0 (в противном случае я не могу запустить свои тесты с помощью Resharper's TestRunner).
  • Мой проект DataAccess ссылается на 1.0.60.0 и
  • Мой основной проект не знает ничего, что связано с базой данных.

1.0.60.0 - это x86, а 1.0.74.0 - это x64.

Когда сайт развернут, серверу требуется x86.

ОБНОВЛЕНИЕ 2:

Существует опция для TestDriven.NET, в которой он использует 32-разрядные или 64-разрядные процессы в разделе Сервис -> Параметры -> TestDriven.NET. Я изменил это на 64-битный. Теперь, если щелкнуть правой кнопкой мыши и выбрать «выполнить тесты», они будут выполнены нормально, но у меня все еще остается та же проблема с «Тестом с NCover» или «Тестированием с покрытием», чего я действительно хочу добиться.

1 Ответ

2 голосов
/ 06 ноября 2011

Я думаю, что вы, возможно, ответили на свой вопрос:)

Большинство бегунов, о которых вы упомянули, будут работать в режиме x86 по умолчанию, вам нужно было найти конкретные случаи, когда вы могли бы сказать определенным бегунам (напримерTestDriven.net), чтобы использовать x64 для запуска на вашем компьютере, но теперь вы столкнулись с той же проблемой с NCover или Coverage.

Итак, решение состоит в том, чтобы просто заставить проект работать вместо x86.Ваши библиотеки будут нацелены на x86;Бегун ReSharper обнаружит это по конфигурации сборки в вашем решении.Поскольку ваша целевая производственная машина - x86, проблем нет.Вы можете запускать сборки на базе x86 на Win7 x64.

Перейдите в конфигурацию своего решения и для каждого из своих проектов выберите «целевую платформу», равную x86.Ссылка на сборку SQLite x86 из всех ваших проектов.Вот как мы настроили его на нескольких проектах на машинах разработки Win7x64 с NCrunch, R #, dotCover, которые ведут себя нормально.

...