DDD, etki alanı nesnelerinin herhangi bir zamanda geçerli bir durumda olmasını önerir. Agrega kökleri, gerekli olan tüm parçalara sahip nesnelerin bir araya getirilmesi için geçerli bir durumda başlatılacak şekilde, değişmezleri ve Fabrikaları garanti etmekten sorumludur. Bununla birlikte, bu basit ve izole ünite testleri oluşturma görevini çok zorlaştırıyor gibi görünmektedir.Ünite testlerinizi nasıl basit ve izole tutmaya devam edersiniz ve DDD invaryantlarını garanti eder?
Kitap içeren bir Kitap Kitabımız olduğunu varsayalım. Bir Kitap sahiptir:
- bir Yazar bir Kategori
- Kitapçılar bir liste
Bunlar gerekli özellikler kitabı bulabilirsiniz
Şimdi, tüm Kitapları döndüren BookRepository'nin bir yöntemini test etmek istiyoruz. Yöntemin kitapları iade edip etmediğini test etmek için, bazı Kitapların Havuzda bulunduğu bir test bağlamı (AAA terimlerinde Düzenleme adımı) oluşturmamız gerekir. C#
:
[Test]
public void GetAllBooks_Returns_All_Books()
{
//Lengthy and messy Arrange section
BookRepository bookRepository = new BookRepository();
Author evans = new Author("Evans", "Eric");
BookCategory category = new BookCategory("Software Development");
Address address = new Address("55 Plumtree Road");
BookStore bookStore = BookStoreFactory.Create("The Plum Bookshop", address);
IList<BookStore> bookstores = new List<BookStore>() { bookStore };
Book domainDrivenDesign = BookFactory.Create("Domain Driven Design", evans, category, bookstores);
Book otherBook = BookFactory.Create("other book", evans, category, bookstores);
bookRepository.Add(domainDrivenDesign);
bookRepository.Add(otherBook);
IList<Book> returnedBooks = bookRepository.GetAllBooks();
Assert.AreEqual(2, returnedBooks.Count);
Assert.Contains(domainDrivenDesign, returnedBooks);
Assert.Contains(otherBook, returnedBooks);
}
elimizde yalnızca aracı Kitap Fabrikası, birim test şimdi kullanır ve Factory ve inderectly beri Kategori, Yazar ve Mağaza bağlıdır nesneleri oluşturmak için düşünüldüğünde Bir Kitap oluşturmak için bu nesnelere ihtiyacımız var ve test bağlamına yerleştirelim.
Bu, bir Hizmet birimi sınamasında Hizmet’in arayacağı bir Deponun bağımlı olacağı şekilde bir bağımlılık olduğunu düşünür müsün?
Basit bir şeyi test edebilmek için, tüm nesne kümesini yeniden oluşturmak zorunda kalmanın problemini nasıl çözersiniz? Bu bağımlılığı nasıl kıracak ve testimizde gerek duymadığımız tüm bu Kitap özelliklerinden nasıl kurtulacaksınız? Alay veya saplama kullanarak?
Eğer veya tüketir test edilen nesne bir şey alay ne zaman görüşmelere aksine kullanırsınız sahte/koçanları ne tür bir Depo içeren şeyler, mock up olursa?