6.1 प्रतिपादन

दावा हे विशेष तपासण्या आहेत जे कोडमध्ये वेगवेगळ्या ठिकाणी घातले जाऊ शकतात. काहीतरी चूक झाली हे निर्धारित करणे हे त्यांचे कार्य आहे. किंवा त्याऐवजी, सर्वकाही जसे पाहिजे तसे चालू आहे हे तपासण्यासाठी. हे "आवश्यकतेनुसार" आहे आणि ते तुम्हाला ते वेगवेगळ्या प्रकारे सेट करण्याची परवानगी देतात.

तुम्हाला वरील कोडमध्ये काही प्रतिपादने आधीच आली आहेत. प्रथम समानतेसाठी वस्तू तपासत आहे. जर वस्तू समान नसतील, तर अपवाद टाकला जाईल आणि चाचणी अयशस्वी होईल.

तुलनेचा क्रम येथे महत्त्वाचा आहे , कारण अंतिम अहवालात JUnit "मूल्य 1 प्राप्त झाले, परंतु 3 अपेक्षित होते" असे काहीतरी लिहील. अशा तपासणीचे सामान्य स्वरूप आहे:

assertEquals(standard , meaning)

उदाहरण:

@Test
public void whenAssertingEquality () {
    String expected = "3.1415";
    String actual = "3";

    assertEquals(expected, actual);
}

6.2 पद्धती assertEquals, assertTrue, assertFalse

खाली मी सर्वात लोकप्रिय पद्धतींची यादी करेन - प्रतिपादन. त्यांच्या नावावरून ते कसे कार्य करतात याचा अंदाज लावणे शक्य आहे. पण तरीही मी एक लहान स्पष्टीकरण लिहीन:

assertEquals दोन वस्तू समान आहेत हे तपासते
assertArrayEquals दोन अॅरेमध्ये समान मूल्ये आहेत का ते तपासते
assertNotNull युक्तिवाद शून्य नाही का ते तपासते
assertNull युक्तिवाद शून्य आहे का ते तपासते
assertNotSame दोन युक्तिवाद समान ऑब्जेक्ट नाहीत हे तपासा
assertSame दोन वितर्क समान ऑब्जेक्ट आहेत हे तपासा
खरे आहे युक्तिवाद खरा आहे का ते तपासतो
असत्य दावा युक्तिवाद खोटा आहे का ते तपासते

यापैकी काही पद्धती अनावश्यक वाटतात. तुम्ही assertTrue(a == b) लिहू शकता तेव्हा assertSame(a, b) का वापरा ?

मुद्दा असा आहे की दावा करणे ही एक अतिशय स्मार्ट पद्धत आहे. हे लॉगमध्ये त्रुटी माहिती लिहिण्यासह अनेक उपयुक्त गोष्टी करते . पहिल्या प्रकरणात, ते लिहेल की ऑब्जेक्ट A अपेक्षित होता, परंतु ऑब्जेक्ट B प्राप्त झाला होता. दुस-या प्रकरणात, ते फक्त सत्य अपेक्षित होते असे लिहेल .

जेव्हा तुमच्याकडे शेकडो चाचण्या असतात, विशेषत: त्या समर्पित चाचणी सर्व्हरवर चालतात तेव्हा तपशीलवार नोंदी असणे खूप उपयुक्त ठरू शकते. मला वाटते की मला काय म्हणायचे आहे ते तुम्हाला समजले आहे.

अॅरे तुलना उदाहरण:

@Test
public void whenAssertingArraysEquality() {
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    assertArrayEquals(expected, actual);
}

6.3 assertAll पद्धत

वर नमूद केल्याप्रमाणे, दावा पद्धत केवळ तपासणीच करत नाही तर लॉगशी तुलना करण्यायोग्य वस्तूंबद्दल बरीच माहिती देखील लिहिते.

चला एक तुलना करूया:

Address address = unitUnderTest.methodUnderTest();
assertEquals("Washington", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());

पण जर एक पॅरामीटर जुळत नसेल तर बाकीचे तपासले जाणार नाहीत. परंतु ते अजूनही घडावेत आणि त्यांचे परिणाम लॉगमध्ये नोंदवले जावेत अशी माझी इच्छा आहे. परंतु त्याच वेळी, जर किमान एक चेक अयशस्वी झाला, तरीही चाचणी अयशस्वी झाली.

यासाठी एक विशेष पद्धत आहे - assertAll() . प्रथम युक्तिवाद म्हणून, लॉगवर लिहिण्यासाठी एक टिप्पणी लागते आणि नंतर कितीही assert फंक्शन्स.

आमचे उदाहरण त्याच्यासह कसे पुन्हा लिहिले जाईल ते येथे आहे:

Address address = unitUnderTest.methodUnderTest();
assertAll("Complex address comparison script",
    () -> assertEquals("Washington", address.getCity()),
    () -> assertEquals("Oracle Parkway", address.getStreet()),
    () -> assertEquals("500", address.getNumber())
);

मग पत्ता चुकीचा असल्यास, लॉगवर असे काहीतरी लिहिले जाईल:

	Complex scenario comparison address (3 failures)
	expected: <Washington> but was: <Seattle>
    expected: <Oracle Parkway> but was: <Main Street>
    expected: <500> but was: <5772>

6.4 assertTimeout पद्धत

@Timeout भाष्य लक्षात ठेवा ? याने संपूर्ण पद्धतीच्या अंमलबजावणीची वेळ नियंत्रित करण्याची परवानगी दिली. परंतु कधीकधी पद्धतीमध्ये कोडच्या काही भागाच्या अंमलबजावणीवर निर्बंध सेट करणे उपयुक्त ठरते. तुम्ही यासाठी assertTimeout() वापरू शकता .

प्रथम पॅरामीटर म्हणून वेळ पास केला जातो आणि निर्दिष्ट वेळेत कार्यान्वित करणे आवश्यक असलेला कोड (फंक्शन) दुसरा म्हणून पास केला जातो. उदाहरण:

@Test
public void whenAssertingTimeout() {
    assertTimeout(
  	ofSeconds(2),
  	() -> {
    	// pause for one second
    	Thread.sleep(1000);
  	}
	);
}

Assert क्लासमध्ये assertTimeout() पद्धतीचे 12 प्रकार आहेत . तुम्हाला त्यांच्याबद्दल अधिक जाणून घ्यायचे असल्यास, अधिकृत दस्तऐवजात स्वागत आहे .

6.5 assertThrows पद्धत

बर्‍याचदा अशी परिस्थिती असते जेव्हा आपल्याला हे सुनिश्चित करण्याची आवश्यकता असते की विशिष्ट परिस्थितीत कोड योग्य अपवाद फेकतो: तो त्रुटी शोधतो आणि योग्य अपवाद फेकतो. ही एक अतिशय सामान्य परिस्थिती आहे.

या प्रकरणात, आणखी एक उपयुक्त दावा पद्धत आहे - ती assertThrows() आहे . त्याच्या कॉलचे सामान्य स्वरूप आहे:

assertThrows(exception , code)

मूलभूतपणे, हे assertTimeout() पद्धतीसारखेच आहे , फक्त ते तपासते की निर्दिष्ट कोड योग्य अपवाद टाकतो. उदाहरण:

@Test
void whenAssertingException() {
    Throwable exception = assertThrows(
  	IllegalArgumentException.class,
  	() -> {
      	throw new IllegalArgumentException("Exception message");
  	}
    );
    assertEquals("Exception message", exception.getMessage());
}