簡體   English   中英

TDD使用MVC存儲庫模式

[英]TDD With MVC Repository pattern

我正在為基於mvc的項目設計架構。 為了更好的方法,我想使用TDD(使用NUnit框架)模式。 我在項目中隱瞞了一層。

  1. MVC項目
  2. 應用服務層。
  3. 域服務層
  4. 基礎設施層

函數調用將以與圖層編號相同的方式執行。 我想從'應用服務層'(不是來自MVC的控制器)使用TDD概念。 首先告訴我從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(與Nunit)一起用於具有多個層的應用程序?

您應該考慮的方法是Outside-In TDD 我將在非常廣泛的筆觸中概述一個概述,但我強烈建議研究由測試和/或外部測試驅動開發 驅動的不斷增長的面向對象軟件, 獲取更多細節。

行走的骨架和尖刺

說TDD排除了除單元測試以外的任何東西是不正確的。 使用Outside-In,我們的第一個測試應該使用我們應用程序的外部邊界,並使用最小的可行功能。

然后,我們可以針對跨越所有邊界的最薄的功能片段編寫端到端測試,從外部到最內層運行系統。 此時,如果您要觸摸外部依賴項(如數據庫),例如,您將需要使用NUnit的[SetUp][TearDown]屬性來初始化和刪除每個測試的假數據。

完成這些步驟可能需要比我們預期更長的時間,因為可能需要設置大量基礎架構。 但是,這樣做可以確保我們有一個可行的架構來構建。

驗收和單元測試

在這一點上,我們將不會為我們的努力付出很多努力,我們將要開始用一些有用的行為填寫細節。 在實現單個功能之前,可以編寫針對該功能的廣泛驗收測試,然后我們可以放大單元級別並在較小的范圍內利用紅綠重構循環 - 單元 - 來構建不同的層我們的申請。

這是我們使用模擬框架將每個單元與其余單元隔離開來的時候。 如果我們保持類似於洋蔥架構的東西,不斷應用TDD,我們最終會得到一個經過充分測試,松散耦合的系統。

如果我明白你的意思,你沒有描述單元測試,那么你正在描述*積分*測試,這不應該是TDD的結果。 您不應該一次測試多個圖層。 更好的方法是單獨測試您的圖層,因此您應該嘗試模擬/存根您的依賴項。 您可以使用模擬框架來設置依賴項的預期行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM