2012-12-17 38 views
5

मैं सार तत्वों और उनके अंदर संरक्षित तरीकों का परीक्षण कैसे कर सकता हूं? मुझे पता है कि आप में से कुछ सुझाव देंगे कि मुझे अमूर्त वर्ग का परीक्षण नहीं करना चाहिए, बल्कि इसके बजाय प्राप्त कक्षाओं का परीक्षण करना चाहिए। बात यह है कि, मैं ऐसा नहीं करना चाहता। मैं कड़ाई से सार वर्ग का परीक्षण करना चाहता हूं। यहां नमूना वर्ग है:यूनिट-परीक्षण सार वर्ग और उनके अंदर संरक्षित विधियां

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; 
     } 

    } 

मैं इसके लिए एक यूनिट परीक्षण लिख रहा हूं। मुझे पता है कि मैं जो कुछ कर सकता हूं वह एक इकाई-परीक्षण ढांचे का उपयोग करता है (मेरे पास मोक है), लेकिन मुझे इस बारे में कोई जानकारी नहीं है कि इस विशेष उदाहरण के लिए इसका उपयोग कैसे किया जाए।

उत्तर

5

आपके सार तत्व का परीक्षण करने के लिए आपको इसे तुरंत चालू करने की आवश्यकता है। तो परीक्षण उद्देश्यों के लिए एक कक्षा बनाएं जो आपके Component (सार) वर्ग से विरासत में प्राप्त हो।

इंटरफेस का इस्तेमाल होने के अलावा मुझे मॉक के लिए बहुत कुछ नहीं दिख रहा है।

11

आपको परीक्षण के तहत अपनी कक्षा से प्राप्त एक 'टेस्टेबल' कक्षा का उपयोग करने की आवश्यकता है। उदाहरण के लिए, अगर आप इस तरह एक वर्ग है:

public class ProtectedStuff 
{ 
    protected bool MyProtectedMethod() 
    { 
     return true; 
    } 
} 
फिर अपने इकाई परीक्षण विधानसभा में

, अपनी कक्षा से इस तरह के वारिस:

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

यह आपको बिल्कुल के रूप में एक ही इंटरफ़ेस के साथ एक वर्ग देता है मूल, लेकिन अब आप संरक्षित तरीकों तक पहुंच सकते हैं।

+2

कोड के लिए Kudos। यह जवाब @ulises के मुकाबले काफी बेहतर है –