从 nunit-console 运行测试时出错

问题描述 投票:0回答:1

我有一个非常简单的测试,如下所示。

 [Test]
 public void TestConnection()
 {
     var connectionString = "valid value for connectionstring";
     var connection = new SqlConnection(connectionString);
     connection.Open();
 }

当我使用 resharper 从 Visual Studio 运行此程序时,一切正常。 但是当我尝试从 nunit3-console.exe 运行此测试时,出现以下错误。

System.TypeInitializationException : The type initializer for 'Microsoft.Data.SqlClient.TdsParser' threw an exception.
  ----> System.TypeInitializationException : The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
  ----> System.DllNotFoundException : Unable to load DLL 'Microsoft.Data.SqlClient.SNI.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)
   at Microsoft.Data.SqlClient.TdsParser..ctor(Boolean MARS, Boolean fAsynchronous)
   at Microsoft.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
   at Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
   at Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken, DbConnectionPool pool, Func`3 accessTokenCallback)
   at Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)

我使用 Nunit 4.1.0 和 NUnit.Console-3.17.0。已尝试使用旧版本的 nunit 但结果相同。该项目是使用.net8构建的。

有什么建议吗?

我已经测试过使用控制台运行程序来运行它。 https://github.com/nunit/nunit-console/releases/tag/3.17.0

csproj

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
    <PackageReference Include="NUnit" Version="4.1.0" />
  </ItemGroup>

</Project>

带有测试容器的示例项目给了我相同的结果。 https://github.com/pahe/Nunit-Console

nunit .net-8.0 nunit-3.0
1个回答
0
投票

我想我已经解决了这个问题。如果我将文件 Microsoft.Data.SqlClient.SNI.dll 复制到控制台运行程序的 bin 文件夹中,它就可以工作。不确定这是最好的解决方案,但它现在有效。

© www.soinside.com 2019 - 2024. All rights reserved.