2009-07-30 11 views
6

साथ बुलाया गया था मैं एक विधि है कि एक संपत्तिराइनो Mocks जोर संपत्ति सेटर सही ऑब्जेक्ट प्रकार

public void SetNetworkCredential(string userName, string password, string domain) 
{ 
    _reportExecutionService.Credentials = new NetworkCredential(userName, password, domain); 
} 

मैं कैसे सत्यापित करूँ कि साख एक वैध NetworkCredential साथ बुलाया गया था सेट है?

मैं इस TestMethod की कोशिश की लेकिन यह विफल रहता है क्योंकि NetworkCredential वस्तुओं अलग संदर्भ

[TestMethod] 
public void TestTest() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var mock = MockRepository.GenerateMock<IReportExecutionService>(); 
    var rptService= new ReportService(mock); 

    rptService.SetNetworkCredential(userName, password, domain); 

    mock.AssertWasCalled(x => x.Credentials = new System.Net.NetworkCredential(userName, password, domain)); 
} 

वहाँ मान्य करने के लिए है कि सेटर प्रकार NetworkCredential का एक उद्देश्य के साथ और सही मापदंडों के साथ बुलाया गया था एक रास्ता है कर रहे हैं?

उत्तर

15

मैं ReportService उपयोगकर्ता नाम, पासवर्ड के बजाय एक नेटवर्क क्रेडेंशियल को स्वीकार करने से यह तय हो गई, डोमेन

public void SetNetworkCredential(NetworkCredential networkCredential) 
{ 
    _reportExecutionService.Credentials = networkCredential; 
} 

तो अपने परीक्षण बहुत आसान

[TestMethod] 
public void TestTest() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var mock = MockRepository.GenerateMock<IReportExecutionService>(); 
    var rptService= new ReportService(mock); 

    var networkCredential = new System.Net.NetworkCredential(userName, password, domain); 

    rptService.SetNetworkCredential(networkCredential); 

    mock.AssertWasCalled(x => x.Credentials = networkCredential); 
} 
+0

उत्कृष्ट उत्तर, इसलिए यह कोड वास्तव में परीक्षण करता है यदि सेटटर को दिए गए मान के साथ बुलाया गया था: mock.AssertWasCalled (x => x.PropertyName = VALUE_WE_ARE_CHECKING); – Roboblob

3

संपादित करें: इस समस्या को पुनर्विचार करते हुए, मेरा पिछला सुझाया गया उत्तर शायद काम नहीं करेगा। यहां बताया गया है:

अनिवार्य रूप से, आप यह सत्यापित करने का प्रयास कर रहे हैं कि निर्भरता की निर्भरता सही तरीके से स्थापित की गई है। शायद यही कारण है कि आपको इसके लिए यूनिट परीक्षण लिखने में समस्याएं आ रही हैं। आप शायद इस बात पर विचार करना चाहते हैं कि SetNetworkCredential विधि को कक्षा में ले जाने के लिए यह समझ में आएगा कि IReportExecutionService लागू करता है।

और अगर आप ऐसा करेंगे, कि विधि के लिए इकाई परीक्षण काफी सरल होगा:

[Test] 
public void TestSetNetworkCredential() 
{ 
    const string userName = "userName"; 
    const string password = "password"; 
    const string domain = "domain"; 

    var rptService= new ReportExecutionService(); 

    rptService.SetNetworkCredential(userName, password, domain); 
    Assert.AreEqual(userName, rptService.Credentials.UserName); 
    Assert.AreEqual(password, rptService.Credentials.Password); 
    Assert.AreEqual(domain, rptService.Credentials.Domain); 
} 
+0

कि यकीन के लिए आदर्श होगा था। लेकिन आईआरईपोर्टएक्सक्यूशन सेवा लागू करने वाली कक्षा एक कोड जेनरेट क्लास (डब्लूएसडीएल से एसएसआरएस) है, मैंने आईआरईपोर्टएक्सक्यूशन सर्विस को निकाला ताकि मैं इसे नकल कर सकूं। –

संबंधित मुद्दे