(Я открыл похожую проблему на странице GitHub Xunit здесь: https://github.com/xunit/xunit/issues/2037)
Я пытаюсь использовать базу данных SQLite в памяти для целей тестирования. Поэтому, следуя тому, что я собрал здесьи там, в Интернете, я создал тестовый проект Xunit, который использует Microsoft.Data.SQLite
и SQLitePCLRaw.bundle_green
nugets.
До версии SQLite v2 и версии SQLitePCLRaw v1.x у меня не было никаких проблем. Однако, начиная с SQLite v3 и PCL v2, я не могу заставить что-либо работать. Как только я пытаюсь создать экземпляр соединения, мне выдается Exception
с сообщением «not found» со следующей трассировкой стека:
Stack Trace:
SqliteConnection.ctor(String connectionString)
InMemory.CreateConnection() line 81
UnitTest1.Test1() line 15
----- Inner Stack Trace -----
RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
BundleInitializer.Initialize()
SqliteConnection.cctor()
----- Inner Stack Trace -----
NativeLibrary.Load(String libraryName, Assembly assy, Int32 flags)
Batteries_V2.MakeDynamic(String name, Int32 flags)
Batteries_V2.DoDynamic_cdecl(String name, Int32 flags)
Batteries_V2.Init()
При попытке найти проблему я создал фиктивные тестовые проекты в Xunit, nUnit и MSTest, а также консольный проект. Я также нацеливаюсь на net48
и netcoreapp3.0
в каждом проекте.
Как выяснилось, проблема возникает только тогда, когда код запускается в ядре тестирования Xunit , в .NET 4.x (работает с ядром dotnet). В любом другом сценарии всеработает как положено. Поэтому мне трудно худетьk что это проблема SQLite больше, чем проблема Xunit.
Код можно найти здесь:
https://github.com/RosairePion/wonderland-csharp-sqlitepclraw
Может кто-нибудь подсказать мне, что происходит? Xunit использует SQLite для внутреннего использования, что вызывает конфликты во время выполнения или что-то в этом роде?
Спасибо.