Tuesday, April 04, 2006

Test Driven Design & Domain Driven Design (Design & Test) - Part 3

Artikel sebelum ini:

Test Driven Design & Domain Driven Design (Side By Side Analisa) - Part 1
Test Driven Design & Domain Driven Design (Design & Test) - Part 2

Artikel sebelum ini, saya terangkan secara ringkas bagaimana saya bina domain model dari Use Case (RUP Style) / User Story (XP Style). Sebelum saya terangkan detail sambungan artikel ini, saya nak bawa sedikit maklumat tentang TDD. Pada artikel sebelum ini, saya tak berkesempatan nak cerita tentang TDD, saya anggap sesiapa yang berminat supaya dapat cari sendiri maklumat berkaitan TDD di search engine. Cuma saya akan tulis maklumat ringkas tentang TDD.


TDD - Test Driven Design menitikberatkan supaya any software development bermula dengan simple test dan pastikan test tersebut lulus, kemudian buat lagi test untuk User Story yang lain.

Kembali ke context problem sebelum ini berkaitan Research Management. Antara point penting dalam context tersebut ialah part payment dimana payment boleh dikategory kepada beberapa type dan setiap payment mempunyai beberapa saluran kemana amount tersebut dibahagikan. Saya bawa contoh dalam gambar dibawah.


Saya ada buat beberapa perubahan pada domain model design, berdasarkan beberapa soalan yang ditanya pada Domain Expert.Contoh adalah seperti dibawah.




Memang pada permulaan saya design agak simple dan saya akan buat simple test untuk domain model ini.

using System;
using NUnit.Framework;
using System.Collections;



namespace ResearchDomainTest
{
/// <summary>
/// Summary description for ResearchTest.
/// </summary>
///
[TestFixture]
public class ResearchTest
{
private Research r;
private Payment p;
private PaymentItem pi;

[SetUp]
public void SetUp()
{
r = new Research();
p = new Payment();
pi = new PaymentItem();
}

[TearDown]
public void TearDown()
{
r = null;
p = null;
pi = null;
}

[Test]
public void TestResearchWithResearchCategory1()
{
r.ResearchCategory = "UniversityResearch";
Assert.AreEqual("UniversityResearch",r.ResearchCategory);

r.ResearchCategory = "SponsoredResearch";
Assert.AreEqual("SponsoredResearch",r.ResearchCategory);
}


[Test]
public void TestPaymentWithPaymentType()
{
p.PaymentType = "AmountApproved";
Assert.AreEqual("AmountApproved",p.PaymentType);
}

[Test]
public void TestPaymentItemWithPaymentItemType()
{
pi.PaymentItemType = "ResearchAssistant";
Assert.AreEqual("ResearchAssistant",pi.PaymentItemType);
}

[Test]
public void TestResearchWithManyPayment()
{
Payment p1 = new Payment();
p1.PaymentType = "AmountApproved";
r.payments.Add(p1);

Assert.AreEqual(1,r.payments.Count);

Payment p2 = new Payment();
p2.PaymentType = "FirstDisbursement";
r.payments.Add(p2);

Assert.AreEqual(2,r.payments.Count);

}

[Test]
public void TestPaymentWithManyPaymentItem()
{
Payment p1 = new Payment();
p1.PaymentType = "AmountApproved";

PaymentItem pit1 = new PaymentItem();
pit1.PaymentItemType = "ResearchAssistant";

p1.paymentItems.Add(pit1);

Assert.AreEqual(1,p1.paymentItems.Count);

}
}
}

1 comments:

Anonymous said...

apa language dlm source code ni?
nmpk mcm c++.