【问题标题】:steps to unit test your mvc3 application?对您的 mvc3 应用程序进行单元测试的步骤?
【发布时间】:2012-07-12 20:27:50
【问题描述】:

我正在使用 asp.net mvc3 构建我的网站。我有以下几层。

控制器 -> 服务 -> 存储库

我刚开始我的项目,那里没有任何东西。我先从界面开始。

public interface IRepository<T>
{
    T Get(int id);
    void Save(T item);
    void Delete(int id);
}


public interface IUserRepository : IRepository<User>
{
    User GetUserByLogin(UserLoginViewModel userLogin);
}

此时,我应该开始写单元测试还是先实现接口,写具体的repository方法,然后根据我写的方法进行单元测试。

我很困惑,不知道应该先走哪一步。

【问题讨论】:

  • 查看关于 Asp.NET MVC 的 Steve Sanderson 书籍。他将引导您构建一个包含单元测试的 MVC 应用程序,其中包含完美的细节。我猜您对 MVC 和单元测试 (TDD) 都太陌生了,无法尝试自己一起解决它们。
  • 写单元测试的目的是什么?你为何这样做?一旦你知道了目的,你就会明白一切。

标签: c# asp.net-mvc asp.net-mvc-3 unit-testing


【解决方案1】:

正如我在您的another question 中指出的那样,理想情况下,您是从外向内编写测试,定义外部对象所需的依赖项,并模拟它们。这允许您使用漂亮的 API 完成依赖项接口。

因此,在此示例中,您将在为用户控制器编写测试时创建IUserRepository 接口。然后你创建一些实现这个接口的类,并开始为你的存储库实现编写测试。

另一个选项(我更喜欢) - 通过垂直切片迭代地实现您的系统:

  1. 您为控制器编写了一些测试
  2. 您决定控制器需要存储库功能(例如Save
  3. 您将该功能添加到存储库界面
  4. 你模拟这个接口进行控制器测试,并让它通过
  5. 您为存储库实现的Save 方法编写测试并使其通过
  6. 此时所有切片都已测试并正常工作。您返回到第 1 步。

顺便说一句,对存储库进行单元测试非常耗时,并且会给您带来一点好处,因为通常存储库中没有太多逻辑。我宁愿进行验收测试,它会运行所有系统并证明该功能已实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-03-21
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多