c# - 私有配置管理器字段在单元测试中失败
问题描述
我有以下代码:
/// <summary>
/// Gets the connection string.
/// </summary>
private readonly string _connectionString = ConfigurationManager.ConnectionStrings["Database"].ConnectionString;
/// <summary>
/// Instantiates a new instance of <see cref="DapperReaderWrapper"/> object.
/// </summary>
private readonly IDapperReaderWrapper _dapperReaderWrapper = new DapperReaderWrapper();
/// <summary>
/// Retrieves a list of admins from the database.
/// </summary>
/// <returns>List of admins.</returns>
public List<Admin> RetrieveListOfAdmins()
{
var adminDatabaseReader = new AdminDatabaseReader(_connectionString, _dapperReaderWrapper);
return adminDatabaseReader.GetAll();
}
我正在尝试在底部附近对我的“RetrieveListOfAdmins”方法进行单元测试。这是我的单元测试类:
private string _connectionString;
private Mock<IDapperReaderWrapper> _mockDapperReaderWrapper;
private DatabaseReaderGateway _databaseReaderGateway;
[TestInitialize]
public void Initialize()
{
_connectionString = DatabaseShared.GetTestingConfigurationFile();
_mockDapperReaderWrapper = new Mock<IDapperReaderWrapper>();
_databaseReaderGateway = new DatabaseReaderGateway();
}
[TestMethod]
[TestCategory("Business Test")]
public void DatabaseReaderGateway_RetrieveListOfAdmins_WhenCallingDatabaseReader_ShouldReturnListOfAdmins()
{
// Arrange
var expectedListOfAdmins = DatabaseShared.MockSetupListOfAdmins();
SetupMockDapperReaderWrapper("AllAdmins", expectedListOfAdmins);
// Act
var actualListOfAdmins = _databaseReaderGateway.RetrieveListOfAdmins();
// Assert
Assert.AreEqual(expectedListOfAdmins, actualListOfAdmins, "We were expecting lists to be equal, but they were not.");
Assert.IsTrue(actualListOfAdmins.Count > 0, "We were expecting a list of admins, but got back zero.");
}
/// <summary>
/// Sets up the dapper reader wrapper and returns a list of items.
/// </summary>
/// <typeparam name="T">Generic type item.</typeparam>
/// <param name="query">Sql Query.</param>
/// <param name="listOfItems">List of items.</param>
private void SetupMockDapperReaderWrapper<T>(string query, List<T> listOfItems)
{
_mockDapperReaderWrapper.Setup(wrapper => wrapper.Query<T>(It.Is<IDbConnection>(db => db.ConnectionString == _connectionString), query, CommandType.StoredProcedure))
.Returns(listOfItems);
}
当我尝试运行测试时,我在班级的 ConfigurationManager 上收到以下错误:“对象引用未设置为对象的实例。”
这是我所有解决方案中的 app.config。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Database" connectionString="Data Source=DESKTOP-IKINKC8\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True;" />
</connectionStrings>
</configuration>
这是我为我的测试项目获取连接字符串的代码:
/// <summary>
/// Gets the configuration file for testing projects.
/// </summary>
/// <returns>Connection string.</returns>
public static string GetTestingConfigurationFile()
{
ExeConfigurationFileMap configFileMap = new()
{
ExeConfigFilename = "App.config"
};
var config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
var section = (ConnectionStringsSection)config.GetSection("connectionStrings");
var connectionStringCollection = section.ConnectionStrings;
var connectionString = string.Empty;
foreach (var connection in connectionStringCollection)
{
if (!connection.ToString().Contains("DESKTOP"))
{
continue;
}
connectionString = connection.ToString();
}
return connectionString;
}
有谁知道这可能是为什么?我的测试项目以及包含我的课程的项目中有一个 app.config。
解决方案
它可能是以下问题之一:
- 您没有将 app.config 添加到您的测试项目中。
- 您没有在 app.config 中添加连接字符串。
推荐阅读
- python - 按小于 Flask SQLalchemy 的字符串长度过滤?
- azure-active-directory - 如何将安全组添加到 Azure 应用服务?
- svelte - 解析获取的主题标签并创建“svelte-routing”链接
- c# - C# 忽略空检查?
- html - Flask WTForms HiddenInput 值未发送到应用程序
- python-3.x - 如何允许组使用 is_staff 属性访问管理页面?
- regex - 花式正则表达式不返回输入中的所有匹配项
- c# - Xamarin.Form 上的 Firebase 电话身份验证
- python - 为参数添加动态值
- javascript - 在 React 中将单击事件从一个类组件传递到另一个类组件