2012-03-28 27 views
12

Verileri SQL Server'dan çeken bir n-katmanlı web uygulamasına sahibiz. Veri Erişimi mantığımız, verileri daha sonra İş nesnelerimizi oluşturmak için kullanılan bir SqlDataReader döndürür (a.k.a. Veri Aktarımı nesneleri).Birim sınama - SqlDataReader'ın izlenmesi

İşletme nesnelerimizi oluşturmak için bu SqlDataReader nesneleri tarafından döndürülen verileri yorumlayan kodumuzu denetlemek için birim testleri oluşturmayı istiyoruz. Bu nedenle, birim sınama sırasında SqlDataReader nesnelerini değiştirmek için saplamalar oluşturmak gerekli görünmektedir. Muhtemelen oldukça tipik olduğu gibi, SqlDataReader nesnelerimiz her biri birden çok satır içeren birden çok kayıt kümesini döndürür.

  1. Bu mantıklı bir çaba mı?
  2. Bu saplama nesnelerinin oluşturulmasına nasıl başlamalıyız? peşin

çok teşekkürler

Griff

cevap

24

Otomatik test her zaman temelde mantıklı bir çaba :)

İlk adım bu Veri Erişim mantık dönüşünü sahip olmaktır test edebilmek için SqlDataReader - SqlDataReader yerine IDataReader, IDataReader uygular, bu nedenle sorun yoktur.

Birim testlerinizde, DataTable nesnelerini el ile oluşturabilir ve doldurabilir ve IDataReader10 numaralı telefonu arayarak test edilen nesneye geçebilirsiniz.

Düzenleme Bir adanmış bir yerde veri tablolarının oluşturulmasını tutarak kullandığınız her veri tablosu için bir ObjectMother kullanarak öneririm, örnek verilerin bir dizi ile testlerle sağlamak. Belirli verileri güçlü bir şekilde güncellemek için her bir ObjectMethod sınıfına yöntemler ekleyebilirsiniz. Örneğin:

IDataReader customerDetailsReader = new PersonalDetailsBuilder() 
    .CreateNewTable() 
    .AddStandardData() 
    .AddRow(17, "Customer 17") 
    .ToDataReader(); 
+0

bizim IDataReader nesnelerden biri bir müşteri ile ilgili ayrıntıları verir düşünün: Eğer o zaman bu gibi kullanabilirsiniz

public class PersonalDetailsBuilder { private DataTable _dataTable; public PersonalDetailsBuilder CreateNewTable() { this._dataTable = new DataTable("CustomerPersonalDetails") { Columns = new[] { new DataColumn("CustomerId", typeof(int)), new DataColumn("CustomerName", typeof(string)) } }; return this; } public PersonalDetailsBuilder AddStandardData(int numberOfRows = 3) { foreach (int i in Enumerable.Range(1, numberOfRows + 1)) { this.AddRow(i, "Customer " + i); } return this; } public PersonalDetailsBuilder AddRow(int customerId, string customerName) { this._dataTable.Rows.Add(customerId, customerName); return this; } public IDataReader ToDataReader() { return this._dataTable.CreateDataReader(); } } 

... Bir veri okuyucu almak için RS1 = kişisel bilgilerini; rs2 = izinler; rs3 - xxx vs. Çoğu test bunu varsayılan bir veri seti olarak kullanacaktır. Bazı testler bu değerlerin çoğunu kullanmak isteyebilir, ancak datatables'deki özelliklerin bir kısmını geçersiz kılabilir. Bu ne kadar kolay? Neredeyse miras gibi .... – DrGriff

+0

Anladığımdan emin değilim - birden çok sonuç kümesi için tek bir veri okuyucusu veya bir dizi veri okuyucusu mu demek istediniz? Her durumda, cevabımı güncelledim. –

+0

Neden düşüş var? Kimse...? –

İlgili konular