gpt4 book ai didi

c# - VS MSTest runner 在内存测试中运行时锁定 System.Data.SQLite.dll

转载 作者:IT王子 更新时间:2023-10-29 06:24:34 25 4
gpt4 key购买 nike

我正在使用 Fluent NHibernate 通过 SQLite 1.0.66.0 运行内存数据库测试(MS 测试):

[TestClass]
public abstract class InMemoryDatabaseTest
{
private NHibernate.Cfg.Configuration configuration;
private ISessionFactory sessionFactory;

[TestInitialize]
public void Initialize()
{
// All "CreateConfiguration" does is load FNh mappings.
this.configuration = new NhConfigurationBuilder()
.CreateConfiguration()
.Database(() => SQLiteConfiguration.Standard.InMemory())
.BuildConfiguration();

this.sessionFactory = this.configuration.BuildSessionFactory();
}

[TestCleanup]
public void Cleanup()
{
new SchemaExport(this.configuration).Drop(false, true);
sessionFactory.Dispose();
}

protected ISession CreateSession()
{
var session = this.sessionFactory.OpenSession();

// Re-create the database every time a new session is created.
new SchemaExport(this.configuration)
.Execute(script: false, export: true, justDrop: false, connection: session.Connection, exportOutput: null);

session.BeginTransaction();
return session;
}
}

然后以此为例:

[TestClass]
public class MessagesControllerTests : InMemoryDatabaseTest
{
[TestMethod]
public void SQLite_should_have_all_handles_released()
{
using (var session = this.CreateSession())
{
// Don't even need to do anything.
}
}
}

运行此测试后,我尝试清理 整个解决方案。结果如下:

  • 运行此测试(CTRL + R、CTRL + T)时,清理能够按预期成功。
  • 在 (CTRL + R, T) 中调试此测试时,clean 失败并出现错误:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft。 Common.targets(3607,9):警告 MSB3061:无法删除文件“PathToProject\bin\Debug\System.Data.SQLite.DLL”。拒绝访问路径“PathToProject\bin\Debug\System.Data.SQLite.DLL”。

我的第一个想法是可以,删除 DLL。当我尝试时,系统提示我 QTAgent32.exe 当前正在使用 DLL。我使用 Process Explorer 来验证这一点。出于某种原因,ms 测试运行程序保留了 DLL 的句柄。我已经尝试根据 another question 的一些建议修改 Cleanup 方法,但它仍然不起作用:

[TestCleanup]
public void Cleanup()
{
new SchemaExport(this.configuration).Drop(false, true);
sessionFactory.Close();
sessionFactory.Dispose();
SQLiteConnection.ClearAllPools();
GC.Collect();
}

我已经能够在 3 台不同的机器上重现它。任何解决此问题的已知方法将不胜感激。

更新:我已经清理了一些语言上的困惑。实际的解决方案配置可以在 Debug/Relase 中。但是,运行测试与调试测试会导致错误消息不同。

最佳答案

我一直遇到类似的问题(SQLite.dll 被 Visual Studio 测试运行程序锁定,尽管大多数情况下处于 Debug模式并使用 MbUnit 测试),并且发现使用 TestDriven.net 运行我的测试解决了我的问题。抱歉,在此之后我再也没有进一步研究过 MSTest 运行程序。

关于c# - VS MSTest runner 在内存测试中运行时锁定 System.Data.SQLite.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com