【问题标题】:TDD With MVC Repository patternTDD 与 MVC 存储库模式
【发布时间】:2014-03-04 07:38:44
【问题描述】:

我正在为基于 mvc 的项目设计架构。为了更好的方法,我想使用 TDD(使用 NUnit 框架)模式。我在项目中有闲置层。

  1. MVC 项目
  2. 应用服务层。
  3. 域服务层
  4. 基础设施层

函数调用的执行方式与层编号相同。 我想使用来自“应用程序服务层”的 TDD 概念(不是来自 MVC 的控制器)。 首先告诉我从 MVC 以外的层使用 TDD 是正确的方法。其次我很困惑,如果我采用这种方式,我将如何调用应用层函数进行 crud 操作,因为应用层函数具有内部为 crud 操作调用域服务层函数。我尝试通过创建其类对象来直接调用应用程序层函数,但它给出了对象引用未设置为对象实例的错误。

我的代码是

using ApplicationServices.AppServiceInterfaces;
using ApplicationServices.AppServiceClasses;
using PeocitEntities.MasterEntities;

 namespace MyUnitTest
{
[TestFixture]
public class Account_Group
{
    AccountGroupApplnService accApplicationServiceObject;

    [TestFixtureSetUp]
    public void SetupTest()
    {
        accApplicationServiceObject = new AccountGroupApplnService();//Here iam getting error
    }

    [Test]
    public void AddAccountGroup()
    {

        AccountGroup accountGroupObj = new AccountGroup();

        accountGroupObj.strName = "Test TDD Group";
        accountGroupObj.intGroupType = 10;
        accountGroupObj.groupType_name = Enum.GetName(typeof(EnumTypelib.glAccountGroupTypes), accountGroupObj.intGroupType);
        accountGroupObj.intPrimaryGroup = (int)EnumTypelib.PrimaryGroupType.as_liabilities;
        bool IsGroupAccountCreated = accApplicationServiceObject.CreateAccountGroup(accountGroupObj);//Internally calls service & then infra layer.
        Assert.True(IsGroupAccountCreated);
    }


    [TestFixtureTearDown]
    public void TearDownTest()
    {
        accApplicationServiceObject = null;
    }
}

}

我的问题是如何将 TDD(with Nunit) 用于具有多层的应用程序?

【问题讨论】:

    标签: c# model-view-controller tdd nunit


    【解决方案1】:

    您应该考虑的一种方法是Outside-In TDD。我将以非常广泛的笔触概述概述,但我强烈建议您学习Growing Object-Oriented Software Driven by Tests 和/或Outside-In Test-Driven Development 以了解更多详细信息。

    行走的骷髅和尖刺

    说 TDD 排除了除单元测试之外的任何东西是不正确的。对于外向内,我们的第一个测试应该使用最小的可行功能来测试应用程序的外部边界。

    然后,我们可以针对所有边界的最薄功能片编写端到端测试,从外层到最内层运行系统。此时,如果您要接触数据库等外部依赖项,例如,您需要使用 NUnit 的 [SetUp][TearDown] 属性来初始化和删除每个测试的假数据。

    完成这些步骤所需的时间可能比我们预期的要长,因为可能需要设置大量基础架构。然而,这样做可以确保我们有一个可行的架构来构建。

    验收与单元测试

    在这一点上,我们的努力没有太多可展示的东西,我们希望开始用一些有用的行为来填充细节。在实现单个功能之前,可以编写对该功能的广泛验收测试,然后我们可以放大单元级别并在更小的范围(单元)中利用 red-green-refactor 循环来构建我们应用程序的不同层.

    此时我们将使用mocking framework 将每个单元与其他单元隔离开来。如果我们维护类似于onion architecture 的东西,始终如一地应用 TDD,我们最终会得到一个经过良好测试的松散耦合系统。

    【讨论】:

      【解决方案2】:

      如果我明白你的意思,你不是在描述单元测试,你是在描述*集成*测试,这不应该是 TDD 的结果。您不应该一次测试多个层。更好的方法是单独测试您的层,因此您应该尝试模拟/存根您的依赖项。您可以使用模拟框架来设置依赖项的预期行为。

      【讨论】:

      猜你喜欢
      • 2015-01-23
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2011-11-26
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多