नूनिट - सी #, नुनिट के माध्यम से नई वस्तुओं का निर्माण कैसे करें

मैं एक विधि का परीक्षण करने के लिए एक नैनिट टेस्ट लिखना चाहता हूं लेकिन मैं उस विधि के अंदर तुरंत ऑब्जेक्ट को मॉक करने में सक्षम नहीं हूं।

यहां कोड है:

public class Converter()
{
public void modifyScore(string convertTo){
ScoreConverter scoreConverter;
if(convertTo.Equals("decimal"){
scoreConverter = new DecimalScoreConverter();
scoreConverter.determineScore();
}
else{
scoreConverter = new IntegerScoreConverter();
scoreConverter.determineScore();
}
}

मैं संशोधितस्कोर के लिए एक परीक्षण लिखना चाहता हूं और यह जांचना चाहता हूं कि किस ऑब्जेक्ट की विधि ने कहा है।

मैं नूनिट का उपयोग करके इस विधि का परीक्षण कैसे कर सकता हूं?

उत्तर:

जवाब के लिए 0 № 1

सबसे पहले आपको अवशेषों के खिलाफ काम करना शुरू करना चाहिए। मुझे लगता है कि यह सभी नकली ढांचे के लिए जरूरी है। आपके द्वारा दी गई जानकारी से, और कुछ मान्यताओं से:

वैसे भी, हम यहां जाते हैं:

public Interface IConverter
{
IScoreConverter ScoreConverter { get; set; };//use constructorinjection instead
void ModifyScore(string convertTo);
}

public Interface IScoreConverter
{
DetermineScore();
}

मैं एक नज़र डालने की सिफारिश करेंगे MOQ

आपको यह पता लगाने की आवश्यकता है कि आप आंतरिक वस्तु से क्या लौटना चाहते हैं। अभी के लिए आप ModifyScore से कोई भी मूल्य वापस नहीं करते हैं, इसलिए आपके पास परीक्षण करने के लिए कुछ भी नहीं है।

अगर आप वापस आ जाएंगे एक स्ट्रिंग, परीक्षण इस तरह दिख सकता है:

var scoreConverterResponse = "theStringYouWantToBeReturned"

var scoreConverterMock = new Mock<IScoreConverter>();
scoreConverterMock.Setup(sc => sc.DetermineScore())
.Returns(scoreConverterResponse);

scoreConverterMock.Verify(sc => sc.DetermineScore(It.IsAny<string>()), Times.AtLeastOnce());

मैंने नामकरण सम्मेलन टॉम i.e. CamelCase विधियों को तय किया। मैंने इसे फ्लाई पर लिखा था, इसलिए यदि संकलन त्रुटियां हैं तो मैं क्षमा चाहता हूं।


उत्तर № 2 के लिए -1

यूनिट परीक्षण ज्यादातर राज्य परिवर्तन पर आधारित होते हैं। तो, प्राकृतिक पाठ्यक्रम है:

  • कक्षा में कुछ करो
  • परीक्षण करें कि वर्ग की स्थिति अपेक्षित के रूप में बदल गई है या नहीं

शायद आप स्कोर के प्रकार का परीक्षण करने के लिए अपने कोड में बदलाव पर विचार कर सकते हैं कनवर्टर:

public class Converter
{
public ScoreConverter scoreConverter { get; set; }

public void modifyScore(string convertTo){

if(convertTo.Equals("decimal"){
scoreConverter = new DecimalScoreConverter();
}
else{
scoreConverter = new IntegerScoreConverter();
}
scoreConverter.determineScore();
}

आपका परीक्षण तब संशोधित सॉकोर () विधि निष्पादित कर सकता है, और फिर स्कोर कनवर्टर चर के प्रकार का दावा करें।

यदि आप संपत्ति को सार्वजनिक बनाना नहीं चाहते हैं, तो दूसरा विकल्प इसे आंतरिक बनाना है और फिर इसे जोड़ना है InternalsVisibleToAttribute, या शायद एक फैक्टरी वर्ग का उपयोग करने के लिए और फिर परीक्षण में नकली, जैसा कि amcdermott ने बताया।

घणी खम्मां!


संबंधित सवाल
सबसे लोकप्रिय