asp.net - MVC 4 应用程序服务层中的单元测试

标签 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

过去两天我一直在开始和重新开始这个学习过程,因为我真的不知道如何开始。

我有一个包含三层的 MVC4 应用程序:Web、服务和核心。 Controller 向服务层发送请求,服务层提供 Controller 用于为 View 混合 View 模型的信息。

我的服务层有以下方法:

public interface ISetServices
{
    List<Set> GetBreadcrumbs(int? parentSetId);
    Set GetSet(int? setId);
    Set CreateSet(string name, string details, int? parentSetId);
    void DeleteSet(int? setId);

    Card GetCard(int? cardId);
    Card CreateCard(List<string> sides, string details, int? parentSetId);
    void DeleteCard(int? cardId);

    Side GetSide(int? sideId);
    List<String> GetSides(Card card);
    Side CreateSide(Card card, string content);
    void DeleteSide (int? sideId);

}

我正在尝试弄清楚如何创建一个单元测试类库来测试这些功能。

当测试运行时,我希望删除一个 TestDatabase(如果它存在)并重新创建,并用数据播种。我的核心项目中有一个“ protected ”的种子方法以及一个 - 我可以使用它吗?如果是这样,如何?

我读到的所有文章都说永远不要在测试中使用数据库,但我不太明白测试的意义何在。这些服务是用来访问和更新数据库的……我不需要数据库来测试吗?

我已经创建了一个 Project.Services.Tests 单元测试项目,但不知道如何连接所有内容。如果可能的话,我想用代码而不是配置文件来做……任何例子或指针都将不胜感激。

最佳答案

这个问题有很多方面,让我尝试解决一些问题:

  • 单元测试是关于测试一个代码单元,最小的可测试代码片段,但是测试代码单元及其与数据库的交互是一个集成测试问题<
  • 解决此问题的一种方法是使用存储库模式 - 它是数据访问层之上的抽象层。您的服务接口(interface)看起来更像是一个存储库模式实现,更多地搜索它。
  • 有些人不测试存储库模式的内部结构,他们只是断言对其接口(interface)的调用。数据库测试被视为集成测试问题。
  • 有些人通过在他们的单元测试中编写 SetUp 和 TearDown 步骤直接访问他们的数据库,通常您会在 SetUp 中插入适当的数据,TearDown 会将其全部清理到以前的状态,但请注意 - 他们可能会变得很漂亮变慢并使您的单元测试变得痛苦。
  • 其他方法是将您的测试配置为使用不同的数据库——例如 SQLCE。对于某些 ORM,数据库交换可能非常容易。这比击中“完整”数据库更快,而且看起来更干净,但数据库实现存在差异,迟早会浮出水面并使您的单元测试痛苦...
  • 目前,随着 NoSQL 解决方案的兴起,直接访问数据库变得非常容易,因为它们通常有对应的内存(如 RavenDB)

我意识到一开始可能有点不知所措,但同样,这个问题有很多方面。将源代码发布到 github 并在此处共享如何?

关于asp.net - MVC 4 应用程序服务层中的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013891/

相关文章:

.net - 如何在 ASP.NET MVC 3 中发布文件数组?

asp.net - ASP.NET MVC 3 中 DropDownListFor 的不显眼验证问题

javascript - Angular 发布到 ASP.NET Core Web API 返回失败

c# - 如何在 ASP.NET MVC4 中不使用 Entity Framework 从数据库检索图像

asp.net-mvc - Razor View 引擎 2.x 中有哪些新增功能?

asp.net - 如何在 ASP.NET 中混合使用 WebForms 和 MVC

页面刷新时 jQuery 未定义

c# - 如何使用 ScriptManager.GetStateString()?

asp.net - 在构建 SharePoint Web 应用程序时我如何从 ASP.NET MVC 知识中受益

asp.net-mvc - 如何访问 asp.net mvc 回发 Controller 操作中的 hiddenField 值?