2012-02-07 28 views
6

İşte senaryoda, bazı spagetti kodlarını yeniden yapıyorum. İlk problemim, diğer sınıfları canlandıran bir sınıf zinciriydi. Bunu, test etmek istediğim sınıfın (Search.cs) bağımlılık olarak ihtiyaç duyduğu sınıfı almasıyla çözdüm, bunu şimdi görüyorum.Başka bir sınıftan devralan bir sınıfı alay

public Search(XmlAccess xmlFile, SearchDatabaseConnect searchDatabaseConnection) 
    { 
     this.xmlFile = xmlFile; 
     FsdcConnection = searchDatabaseConnection; 
     Clear(); 
    } 

Zinciri daha fazla geliştiriyorum. Hepsi iyi ama biraz problemim var.

Başka bir sınıftan miras aldığımı sınıf olarak sınıfladığım sınıf, Yeniden Paylaşım var ve arabirimleri ayıkladım ama sorun bağımlılık sınıfı başka bir somut sınıftan miras alıyor - ne demek istediğimi görüyor musunuz?

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // } 

Ben DatabaseConnect üzerinde miras konusunda ne yapacağını bilmiyor musunuz? Bunu nasıl alayım? Tabii ki o olmasaydı, bir ISearchDatabaseConnect ile alay edebildiğim her şey hazır olurdum ve biz gideriz ama ben somut bir sınıfın mirası üzerinde sıkışıp kaldım. Eminim insanlar googl'ing'den önce bu konuyla ilgili örnekler bulmaya çalışırken başarısız olmuştu.

Herhangi bir yararlı öneri için şimdiden teşekkür ederiz.

+1

Sadece referans için "yeni uping" genellikle örnekleme ;-) –

+0

evet, teşekkür ederim - sadece kişisel tercih meselesi, ben "yeni" terimi gibi seviyorum eğilimindedir çünkü a) anahtarının kullandığı anahtar kelime olduğunu Tamam n ew is) ve b) bir şekilde ortaya çıkmakta olan terimden daha eğlenceli görünüyor. – Kenn

cevap

3

DatabaseConnect ayrıca ondan çıkarılmış bir arabirim var mı?

public interface IDatabaseConnect 

public class DatabaseConnect : IDatabaseConnect 

public interface ISearchDatabaseConnect : IDatabaseConnect 

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 

Ve şimdi iki arayüzde tüm "şeyler" alacak bir Mock<ISearchDatabaseConnect> yapma: Ne gibi kurmak mümkün olmalıdır düşünüyorum.


Yan not, senin yöntemi/yapıcı muhtemelen arayüzünde orada almalı, değil somut:

public Search(XmlAccess xmlFile, ISearchDatabaseConnect searchDatabaseConnection) { ... } 

sen gibi alay enjekte Bu şekilde:

var mockedSearchDatabaseConnect = new Mock<ISearchDatabaseConnect>(); 
var search = new Search(xmlFile, mockedSearchDatabaseConnect.Object); 
+0

Ah ... Çok açık! – Kenn

+0

evet, doğru! Ne demek istediğini anladım. – Kenn

İlgili konular