asp.net-mvc-3 - 由于企业库,NUnit 测试失败

标签 asp.net-mvc-3 unit-testing c#-4.0 nunit enterprise-library

我在这里看到了几个处理类似问题的问题,但没有一个对我有帮助。

我在 MVC 3 项目中将 NUnit 与 VS 2010 结合使用。 我有一个测试项目,正在编写我的第一个测试 Evar! :-)

我终于做到了,你不感到自豪吗?!

这是我得到的错误

Microsoft.Practices.ServiceLocation.ActivationException : Activation error occured while trying to get instance of type Database, key "MyConnection" ----> Microsoft.Practices.Unity.ResolutionFailedException : Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "MyConnection". Exception occurred while: while resolving. Exception is: InvalidOperationException - The type Database cannot be constructed. You must configure the container to supply this value.

我已经用所有这些配置了 web.config 并且当没有在测试中运行时数据会完美返回所以我知道它不是正在消亡的配置,它只是在使用时消亡N单位。

这是我的连接信息:

<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
...
<dataConfiguration defaultDatabase="MyConnection" />
<connectionStrings>
<add name="MyConnection" connectionString="Data Source=MyServerName;Initial Catalog=MyDB;user id=MyUser;password=MyPassword"
  providerName="System.Data.SqlClient" />
</connectionStrings>

我已经使用 NuGet 安装了 DaaB,并且还做了一个干净的手册引用。无论哪种方式,数据在正常使用时都可以正常加载,但在测试中它会死在这一行:

var database = DatabaseFactory.CreateDatabase("MyConnection");

在这个方法中

public IEnumerable<SchoolSearchResultsDTO> Find(SchoolSearchInputDTO dto) {
    List<SchoolSearchResultsDTO> fullList;
    var database = DatabaseFactory.CreateDatabase("MyConnection");
    using (var command = database.GetStoredProcCommand("dbo.usp_School_SearchBySchoolName")) {
        database.AddInParameter(command, "@I_strSchoolName", DbType.String, dto.SearchTerm);
        database.AddInParameter(command, "@I_intNumberOfRecords", DbType.Int32, dto.MaxSearchResults);
        using (var reader = database.ExecuteReader(command)) {
            fullList = new List<SchoolSearchResultsDTO>();
            while (reader.Read()) {
                var fullRecord = new SchoolSearchResultsDTO();
                fullRecord.SchoolID = reader.GetInteger("SchoolId");
                fullRecord.SchoolName = reader.GetString("SchoolName");
                fullRecord.IsDetailedDisplayMode = reader.GetBoolean("IsDetailedDisplayMode");
                fullList.Add(fullRecord);
            }
            reader.Close();
        }
    }
    return fullList;
}

所有其他帖子都在谈论配置错误等问题。我很确定我的配置是正确的,否则在正常使用情况下我将无法获取数据。所以它必须与 NUnit 和 DaaB 一起处理。

有什么好的想法吗? :-) 谢谢大家!

最佳答案

同意@Jesse 关于模拟依赖项的观点。如果您没有隔离 sut,那么它就不是单元测试。 (推荐阅读Art of UnitTesting)

因此从这里开始,您可以说您正在编写集成测试。

如果不查看您的确切设置,就很难判断问题出在哪里。您提到的一件事是您“配置了您的 web.config”。

但是您是否在测试项目中设置了配置文件?配置将从您的单元测试项目而不是 MVC 项目加载。

关于asp.net-mvc-3 - 由于企业库,NUnit 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922669/

相关文章:

c# - POST 提交的表单显示 URL 中的值。难道不应该把他们藏起来吗?

python - unittest.py 与 trace.py 配合不佳 - 为什么?

c# - 线程与任务中的 ThreadStatic 属性

c# - 如何在 View 模型中执行列表? + 数据注释

validation - MVC 3 验证 - 仅在失去焦点或提交后显示错误消息?

asp.net - 插入_ViewStart.cshtml

python - 如何获取一个 Mock 对象的多个实例

java - 测试 Quartz CronTrigger 触发器

visual-studio - 查找所有可选参数并将其删除

linq - FirstorDefault() 导致 linq to sql 延迟加载或急切加载