我有一个专门用于单元测试的 NUnit 测试项目,其目标框架为 .Net Core 2.1。该测试项目引用了另外两个项目,其中一个是窗口窗体基于应用程序,另一个是类库基于数据库交互的应用程序。这两个项目的目标框架都是.Net Framework 4.6.1
我正在编写一个测试来测试方法类库基于应用程序来测试该方法的输出。但它显示以下错误,
'System.IO.FileNotFoundException:无法加载文件或程序集'System.Windows.Forms,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'。该系统找不到指定的文件。'
我已经尝试了以下修复,但没有一个起作用。
- 删除项目引用并再次添加
- 将构建平台目标从 AnyCPU 更改为 X86 和 x64
- Adding 依赖程序集.config 文件内的标记。 (有趣的是 .NET Core 2.1 不提供 .config 文件)
这是测试类(Test_DataClasses.cs),
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using System.Data.SQLite;
using SharedDataClasses;
using MantechAutomationControl;
using System.IO;
using System.Reflection;
namespace MAC_Testing
{
[TestFixture]
class Test_DataClasses
{
#region Tests
[Test]
public void t_m_initializeDatabase()
{
//Assign
string v_dbLocation = Path.Combine("M:\\For_Jabed\\MAC\\MAC\\MantechAutomationControl\\bin\\Debug\\", "DB.sqlite");
//Act
DataClasses_v2.m_initializeDatabase();
//Assert
Assert.That(new FileInfo(v_dbLocation), Does.Exist);
}
#endregion
}
}
这就是上面的测试试图验证的方法,
public static class DataClasses_v2
{
#region Variables
#endregion
#region Methods
public static void m_initializeDatabase()
{
string v_executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string v_dbLocation = Path.Combine(v_executableLocation, "DB.sqlite");
if (!File.Exists(v_dbLocation))
{
DialogResult o_createDBFileDialogBox = MessageBox.Show("Could not find the database in the expected location:\n" + v_dbLocation + "\n\nWould you like to create a new blank database file?", "Warning", MessageBoxButtons.YesNo);
if (o_createDBFileDialogBox == DialogResult.Yes)
{
SQLiteConnection.CreateFile(v_dbLocation);
using (SQLiteConnection o_dbConnection = new SQLiteConnection(@"DataSource=" + v_dbLocation + ";Version=3;"))
{
o_dbConnection.Open();
}
}
else
return;
}
}
我真的不明白这里发生了什么事。尽管需要注意一点,但我实际上正在努力使用纽特形式dll 与表单(对话框)一起使用,因为要测试的方法需要使用对话框。
在测试项目中,有另一个类,并且在这些类中编写的测试对于基于相同目标“类库”的项目运行良好,以验证不同的功能。
希望有人能够解释这里发生了什么。