ज्यूरिट में स्ट्रिंग्स पर मुखरता


186

वहाँ jUnit में लिखने के लिए एक अच्छा तरीका है

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));

7
IMO यह काफी अच्छा है, सुझाए गए विकल्प कम पठनीय हैं
गॉडफादर

3
@ द गॉडफादर कम पठनीय, लेकिन अधिक सार्थक अभिकथन त्रुटियों का उत्पादन करें (अर्थात, स्वीकृत प्रतिक्रिया स्ट्रिंग्स में अंतर दिखाएगी, जहां ओपी समाधान सिर्फ असफल होने पर "गलत होने पर अपेक्षित सत्य" दिखाएगा)
माइक

एक जोर देने वाला "अच्छे" होने पर त्रुटि संदेश देता है। कोड में यह कितना पठनीय है, यह उसके लिए गौण है, क्योंकि आपको कोड को तब तक नहीं देखना है जब तक यह विफल न हो, और विफलता संदेश वह पहली चीज़ है जो आप देखते हैं।
rjmunro

जवाबों:


290

यदि आप Hamcrest और JUnit4 में जोड़ते हैं, तो आप ऐसा कर सकते हैं:

String x = "foo bar";
Assert.assertThat(x, CoreMatchers.containsString("foo"));

कुछ स्थिर आयातों के साथ, यह बहुत बेहतर है:

assertThat(x, containsString("foo"));

स्थिर आयात की आवश्यकता होगी:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.containsString;

8
सुनिश्चित करें कि आप org.junit.Assertबनाम का उपयोग कर रहे हैं junit.framework.Assert, क्योंकि बाद में हैमरेस्ट मैचर नहीं हैassertThat()
दूरदर्शी सॉफ्टवेयर सॉल्यूशंस

15
मुझे लगता है कि जब JUnit 4.10 चल रहा है, तो उपयोग करने के लिए वर्ग org.junit.matchers.JUnitMatchers, उदा: assertThat ("कुछ", JUnitMatchers.containsString ("कुछ"));
इवेन कार्टराईट

1
असफलता के लिए असफल संदेश assertThatअधिक सहायक होता हैassertTrue
माइक रायलैंडर

3
स्थिर आयात की आवश्यकता है import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- किसी को मुसीबत से बचाने के लिए
eis

4
... और org.hamcrest.Matchers.containsString;नवीनतम एपीआई में, hamcrest-libraryनिर्भरता में।
ईएस

13

जब भी संभव हो तो फेस्ट एसेटर 2.0 का उपयोग करें: एसोर्त्ज में और अधिक दावे (एक कांटा) हो सकते हैं

assertThat(x).contains("foo");

मुझे AssertJ.assertThat के साथ एक विधि नहीं मिली। इसके बजाय मुझे यह मिला है - org.assertj.core.api.Assertions.assertThat (कनवर्ज़न एक्सेप्शन) .hasMessageContaining ("कुछ सबस्ट्रिंग");
राज

क्षमा करें, मुझे लगता है कि मेरी उपरोक्त टिप्पणी इस उत्तर के संदर्भ में नहीं है। मैं एक अलग उपयोग के मामले पर था जहां मुझे अपवाद संदेश के भीतर एक विकल्प के लिए जांच करने की आवश्यकता है।
राज

8

हैमरेस्ट मैचर का उपयोग करें containsString()

// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));

// Error Message
java.lang.AssertionError:
Expected: a string containing "myName"
     got: "some other name"

आप वैकल्पिक रूप से और भी अधिक विस्तार त्रुटि संदेश जोड़ सकते हैं।

// Hamcrest assertion with custom error message
assertThat("my error message", person.getName(), containsString("myName"));

// Error Message
java.lang.AssertionError: my error message
Expected: a string containing "myName"
     got: "some other name"

यहाँ एक डुप्लिकेट प्रश्न के लिए मेरा जवाब पोस्ट किया



3

बहुत देर हो चुकी है, लेकिन अभी अद्यतन करने के लिए मैंने इसे सिंटैक्स के साथ किया है

import org.hamcrest.core.StringContains;
import org.junit.Assert;

Assert.assertThat("this contains test", StringContains.containsString("test"));

2

एक और प्रकार है

Assert.assertThat(actual, new Matches(expectedRegex));

इसके अलावा org.mockito.internal.matchersकुछ अन्य दिलचस्प मैचर्स हैं, जैसे StartWith, Containsआदि।



0

उदाहरण (जूनियर संस्करण- 4.13)

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;

public class TestStr {

@Test
public void testThatStringIsContained(){
    String testStr = "hi,i am a test string";
    assertThat(testStr).contains("test");
 }

}

-1

मैंने इस पृष्ठ पर कई उत्तरों की कोशिश की है, कोई भी वास्तव में काम नहीं करता है:

  • org.hamcrest.CoreMatchers.containsString संकलन नहीं करता है, विधि को हल नहीं कर सकता है।
  • JUnitMatchers.containsString को हटा दिया गया है (और CoreMatchers.containsString को संदर्भित करता है )।
  • org.hamcrest.Matchers.containsString : NoSuchMethodError

इसलिए पठनीय कोड लिखने के बजाय, मैंने प्रश्न में उल्लिखित सरल और व्यावहारिक दृष्टिकोण का उपयोग करने का निर्णय लिया।

उम्मीद है कि एक और समाधान सामने आएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.