मैं अपने आवेदन सेवा परत में तरीकों कि इस तरह की बातें कर रहे हैं का एक समूह मिल गया है:आवेदन सेवा परत: यूनिट टेस्ट, एकीकरण टेस्ट, या दोनों?
public void Execute(PlaceOrderOnHoldCommand command)
{
var order = _repository.Load(command.OrderId);
order.PlaceOnHold();
_repository.Save(order);
}
और वर्तमान में, मैं इस तरह इकाई परीक्षण का एक समूह है:
[Test]
public void PlaceOrderOnHold_LoadsOrderFromRepository()
{
var repository = new Mock<IOrderRepository>();
const int orderId = 1;
var order = new Mock<IOrder>();
repository.Setup(r => r.Load(orderId)).Returns(order.Object);
var command = new PlaceOrderOnHoldCommand(orderId);
var service = new OrderService(repository.Object);
service.Execute(command);
repository.Verify(r => r.Load(It.Is<int>(x => x == orderId)), Times.Exactly(1));
}
[Test]
public void PlaceOrderOnHold_CallsPlaceOnHold()
{
/* blah blah */
}
[Test]
public void PlaceOrderOnHold_SavesOrderToRepository()
{
/* blah blah */
}
ऐसा लगता है कि ये यूनिट परीक्षण उस मूल्य को जोड़ता है जो प्रयास के लायक है। मुझे पूरा यकीन है कि आवेदन सेवा परत एकीकरण परीक्षण होना चाहिए, यद्यपि।
क्या आवेदन सेवा परत को इस स्तर पर ग्रैन्युलरिटी के स्तर पर परीक्षण किया जाना चाहिए, या एकीकरण परीक्षण पर्याप्त हैं?
ये वास्तव में हैं अच्छे अंक जो आप लाते हैं। मुझे लगता है कि मैं एकीकरण परीक्षण * पहले * लिखूंगा, फिर देखें कि क्या जोड़ा गया मूल्य इकाई परीक्षण लाएगा (उदाहरण के लिए जब खराब ऑर्डर आईडी प्रदान की जाती है तो अमान्यऑपरेशन अपवादों को फेंक दिया जाता है)। और आप कार्यान्वयन का परीक्षण करने के बारे में भी एक अच्छी बात उठाते हैं - बिंदु इनपुट और आउटपुट है, कार्यान्वयन नहीं। –