mockito
मॉकिटो बेस्ट प्रैक्टिस
खोज…
BDDMockito शैली
व्यवहार चालित विकास (BDD) परीक्षण शैली "दिए गए", "जब" और "तब" परीक्षणों में घूमती है। हालांकि, शास्त्रीय मॉकिटो "जब" "दिए गए" चरण के लिए "शब्द" का उपयोग करता है, और इसमें अन्य प्राकृतिक भाषा निर्माण शामिल नहीं हैं जो बीडीडी को शामिल कर सकते हैं। इस प्रकार, BDDMockito उपनाम व्यवहार संचालित परीक्षणों की सुविधा के लिए संस्करण 1.8.0 में पेश किए गए थे।
सबसे आम स्थिति एक विधि के रिटर्न को ठूंठ करना है। निम्न उदाहरण में, getStudent(String)
मज़ाक उड़ाया की विधि StudentRepository
वापस आ जाएगी new Student(givenName, givenScore)
यदि एक बहस के बराबर है के साथ आमंत्रण givenName
।
import static org.mockito.BDDMockito.*;
public class ScoreServiceTest {
private StudentRepository studentRepository = mock(StudentRepository.class);
private ScoreService objectUnderTest = new ScoreService(studentRepository);
@Test
public void shouldCalculateAndReturnScore() throws Exception {
//given
String givenName = "Johnny";
int givenScore = 10;
given(studentRepository.getStudent(givenName))
.willReturn(new Student(givenName, givenScore));
//when
String actualScore = objectUnderTest.calculateStudentScore(givenName);
//then
assertEquals(givenScore, actualScore);
}
}
कभी-कभी यह जांचने के लिए वांछित है कि क्या निर्भरता से फेंके गए अपवाद को परीक्षण के तहत एक विधि में सही ढंग से संभाला या पुनर्व्यवस्थित किया गया है। इस तरह के व्यवहार को "दिए गए" चरण में इस तरह से ठोकर दी जा सकती है:
willThrow(new RuntimeException())).given(mock).getData();
कभी-कभी यह कुछ साइड इफेक्ट्स सेट करने के लिए वांछित होता है जिसे एक स्टबड विधि का परिचय देना चाहिए। विशेष रूप से यह तब काम आ सकता है जब:
स्टबड विधि एक ऐसी विधि है जो किसी पारित वस्तु की आंतरिक स्थिति को बदलने वाली है
स्टब्ड विधि एक शून्य विधि है
इस तरह के व्यवहार को "उत्तर" चरण में "उत्तर" के साथ दिया जा सकता है:
willAnswer(invocation -> this.prepareData(invocation.getArguments()[0])).given(mock).processData();
जब यह एक मॉक के साथ इंटरैक्शन को सत्यापित करने के लिए वांछित होता है, तो इसे "तब" के साथ should()
या should()
should(VerificationMode)
(केवल 1.10.5 के बाद से) तरीकों से किया जा सकता है:
then(mock).should().getData(); // verifies that getData() was called once
then(mock).should(times(2)).processData(); // verifies that processData() was called twice
जब यह सत्यापित करने के लिए वांछित है कि पहले से ही सत्यापित के अलावा एक मॉक के साथ और अधिक इंटरैक्शन नहीं थे, तो इसे "तब" में shouldHaveNoMoreInteractions()
(2.0.0 के बाद से shouldHaveNoMoreInteractions()
साथ किया जा सकता है:
then(mock).shouldHaveNoMoreInteractions(); // analogue of verifyNoMoreInteractions(mock) in classical Mockito
जब यह सत्यापित करने के लिए वांछित है कि मॉक के साथ बिल्कुल कोई इंटरैक्शन नहीं था, तो इसे "तब" चरण में shouldHaveNoMoreInteractions()
(2.0.0 से shouldHaveNoMoreInteractions()
साथ किया जा सकता है:
then(mock).shouldHaveZeroInteractions(); // analogue of verifyZeroInteractions(mock) in classical Mockito
जब यह जांचने के लिए वांछित है कि क्या तरीकों का आदेश दिया गया था, तो should(InOrder)
(1.10.5 के बाद) और should(InOrder, VerificationMode)
(2.0.0 के बाद से should(InOrder, VerificationMode)
साथ चरण में किया जा सकता है:
InOrder inOrder = inOrder(mock);
// test body here
then(mock).should(inOrder).getData(); // the first invocation on the mock should be getData() invocation
then(mock).should(inOrder, times(2)).processData(); // the second and third invocations on the mock should be processData() invocations