यूनिट परीक्षण सिर्फ एक विशिष्ट इकाई का परीक्षण है। इसलिए यदि आप कक्षा ए के लिए एक विनिर्देश लिख रहे हैं, तो यह आदर्श है यदि कक्षा ए में कक्षा बी और सी के असली ठोस संस्करण नहीं हैं।
ठीक है मैंने बाद में देखा कि इस प्रश्न के टैग में सी ++/पायथन शामिल है, लेकिन सिद्धांत समान हैं:
public class A : InterfaceA
{
InterfaceB b;
InterfaceC c;
public A(InterfaceB b, InterfaceC c) {
this._b = b;
this._c = c; }
public string SomeOperation(string input)
{
return this._b.SomeOtherOperation(input)
+ this._c.EvenAnotherOperation(input);
}
}
चूंकि उपर्युक्त सिस्टम ए सिस्टम बी और सी में इंटरफेस इंजेक्ट करता है, इसलिए आप किसी भी अन्य सिस्टम द्वारा वास्तविक कार्यक्षमता निष्पादित किए बिना सिस्टम ए का परीक्षण कर सकते हैं। यह इकाई परीक्षण है।
सृजन से पूरा होने के लिए एक सिस्टम के पास आने के लिए एक चालाक तरीका है, एक अलग के साथ जब व्यवहार के प्रत्येक टुकड़े के लिए विनिर्देशन:
public class When_system_A_has_some_operation_called_with_valid_input : SystemASpecification
{
private string _actualString;
private string _expectedString;
private string _input;
private string _returnB;
private string _returnC;
[It]
public void Should_return_the_expected_string()
{
_actualString.Should().Be.EqualTo(this._expectedString);
}
public override void GivenThat()
{
var randomGenerator = new RandomGenerator();
this._input = randomGenerator.Generate();
this._returnB = randomGenerator.Generate();
this._returnC = randomGenerator.Generate();
Dep().Stub(b => b.SomeOtherOperation(_input))
.Return(this._returnB);
Dep().Stub(c => c.EvenAnotherOperation(_input))
.Return(this._returnC);
this._expectedString = this._returnB + this._returnC;
}
public override void WhenIRun()
{
this._actualString = Sut.SomeOperation(this._input);
}
}
तो निष्कर्ष में, एक इकाई/विनिर्देश के कई व्यवहार हो सकते हैं, और विनिर्देश बढ़ता है जब आप इकाई/प्रणाली विकसित करते हैं; और यदि परीक्षण के तहत आपका सिस्टम इसके भीतर अन्य ठोस प्रणालियों पर निर्भर करता है, तो देखें।