2012-12-17 11 views
5

İçlerindeki soyut sınıfları ve korunan yöntemleri nasıl test edebilirim? Bazılarınızın soyut sınıfı test etmemem gerektiğini, bunun yerine ondan türeyen sınıfları test etmemizi önereceğini biliyorum. Şey, bunu yapmak istemiyorum. Soyut dersin kendisini kesinlikle test etmek istiyorum. İşte örnek sınıf:ünitelerin soyut sınıflarını ve korunan yöntemleri test eden birimlerini test etme

public interface IF_SystemMessageHandler 
{ 
    ... 
} 

public interface IF_SystemMessageSender 
{ 
    ... 
} 

    public abstract class Component : IF_SystemMessageSender 
    { 

     private eVtCompId mComponentId; 
     private eLayer mLayerId; 
     private IF_SystemMessageHandler mLogger; 

     protected Component(eVtCompId inComponentId, eLayer inLayerId, IF_SystemMessageHandler inMessageHandler) 
     { 
      mLayerId = inLayerId; 
      mComponentId = inComponentId; 
      mLogger = inMessageHandler; 
     } 

     protected void SendSystemMessage(ref eSystemMsgLevel inSystemMsgLevel, ref string inSysMsg) 
     { 
      mLogger.SendSystemMessage(...); 
     } 

     protected void SendSystemMessage(ref eSystemMsgLevel inSystemMsgLevel, ref eTextId inSysMsgID) 
     { 
      mLogger.SendSystemMessage(...); 
     } 

     public void SetMessageHandler(ref IF_SystemMessageHandler InSystemMessageHandler) 
     { 
      mLogger = InSystemMessageHandler; 
     } 

    } 

Bunun için bir birim testi yazıyorum. Yapabileceğim şeylerden birinin bir birim test çerçevesi kullanması olduğunu biliyorum (Moq'um var), ancak bu özel örnek için nasıl kullanılacağı konusunda hiçbir fikrim yok.

cevap

5

Soyut sınıfınızı test edebilmeniz için onu başlatmanız gerekir. Yani, Component (özet) sınıfınızdan miras alınan sınama amaçlı bir sınıf oluşturun.

Kullanılan arayüzlerin yanı sıra Mock için fazla bir şey göremiyorum.

11

Sınıfınızdaki testten geçen bir 'test edilebilir' sınıfı kullanmanız gerekir. Eğer böyle bir sınıf var Örneğin,:

sizin birim test montaj Sonra
public class ProtectedStuff 
{ 
    protected bool MyProtectedMethod() 
    { 
     return true; 
    } 
} 

, bu gibi sınıfından miras:

public class TestableProtectedStuff : ProtectedStuff 
{ 
    public new bool MyProtectedMethod() 
    { 
     return base.MyProtectedMethod(); 
    } 
} 

Bu, tam olarak aynı arayüz olarak bir sınıf verir Orijinal, ama şimdi korunan yöntemlere erişebilirsiniz.

+2

Kodlar için Kudos. Bu cevap, @ulises’den çok daha iyi –