JUnit এর স্ট্রিংগুলিতে AssertContains


186

JUnit- এ লেখার কোনও দুর্দান্ত উপায় আছে?

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

7
আইএমও এটি যথেষ্ট দুর্দান্ত, প্রস্তাবিত বিকল্পগুলি কম পঠনযোগ্য
দ্য গডফাদাররা

3
@ গডফাদার কম পঠনযোগ্য, তবে আরও অর্থপূর্ণ দৃ as় ত্রুটিগুলি উত্পন্ন করুন (যেমন, গৃহীত প্রতিক্রিয়াগুলি স্ট্রিংগুলির মধ্যে পার্থক্য দেখাবে, যেখানে ওপিএস সমাধান ব্যর্থতার ক্ষেত্রে "মিথ্যা প্রত্যাশিত সত্য" প্রদর্শিত হবে)
মাইক

ব্যর্থ হওয়াতে ত্রুটি বার্তা হ'ল কী "দৃ n়তাটিকে" ভাল "করে তোলে। কোডে এটি কতটা পঠনযোগ্য তা তার পক্ষে গৌণ, কারণ কোডটি ব্যর্থ হওয়া অবধি আপনার তাকাতে হবে না এবং ব্যর্থতা বার্তাটি আপনি দেখছেন প্রথম জিনিস।
rjmunro

উত্তর:


290

আপনি যদি হামক্রস্ট এবং 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;
হ'ল

4
... এবং org.hamcrest.Matchers.containsString;সর্বশেষতম এপিআই, hamcrest-libraryনির্ভরতা মধ্যে।
eis

13

ব্যবহার জাহির 2.0 উল্লাসের যখনই সম্ভব সম্পাদনা করুন: assertj আরো গবেষকেরা (ক কাঁটাচামচ) থাকতে পারে

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

আমি AssertJ.assertThat এর সাথে কোনও অন্তর্ভুক্ত পদ্ধতি খুঁজে পাইনি। আমি এর পরিবর্তে এটি খুঁজে পেলাম - org.assertj.core.api.Assertions.assertThat (রূপান্তর ধারণা) .হেসম্যাসেজ কনটেনিং ("কিছু কিছু স্তর");
রাজ

দুঃখিত, আমি মনে করি আমার উপরের মন্তব্যটি এই উত্তরের প্রসঙ্গে খাপ খায় না। আমি অন্যরকম ব্যবহারের ক্ষেত্রে ছিলাম যেখানে আমাকে একটি ব্যতিক্রম বার্তায় একটি সাবস্ট্রিং পরীক্ষা করতে হবে।
রাজ

8

হ্যামক্রেষ্ট ম্যাচার ব্যবহার করুন containsString()

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

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

আপনি evenচ্ছিক একটি আরও বিশদ ত্রুটি বার্তা যুক্ত করতে পারেন।

// 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কিছু অন্যান্য আকর্ষণীয় 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

সুতরাং পাঠযোগ্য কোডটি লেখার পরিবর্তে, আমি পরিবর্তে প্রশ্নে উল্লিখিত সহজ এবং কার্যক্ষম পদ্ধতির পরিবর্তে ব্যবহার করার সিদ্ধান্ত নিয়েছি।

আশা করি আর একটি সমাধান সামনে আসবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.