[英]TDD With MVC Repository pattern
我正在為基於mvc的項目設計架構。 為了更好的方法,我想使用TDD(使用NUnit框架)模式。 我在項目中隱瞞了一層。
函數調用將以與圖層編號相同的方式執行。 我想從'應用服務層'(不是來自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.