web-dev-qa-db-ja.com

jUnitの文字列のAssertContains

JUnitで書くより良い方法はありますか

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

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;
264
Yishai

fest assert 2. 可能な限り編集を使用します: assertj はさらにアサーション(フォーク)

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

ハムクレストマッチャーを使用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"

重複した質問への回答を投稿しました こちら

7
Mike Rylander

新しいassertThat構文を Hamcrest と一緒に使用します。

JUnit 4.4 で開始できます。

5
Robert Munteanu

別のバリアントは

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

さらに、org.mockito.internal.matchersには、StartWithContainsなど、他の興味深いマッチャーがあります。

1
LEON DENIS

遅すぎますが、更新するには、以下の構文で完了しました

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

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

私はこのページで多くの答えを試しましたが、実際に機能するものはありませんでした:

  • org.hamcrest.CoreMatchers.containsStringコンパイルせず、メソッドを解決できません。
  • JUnitMatchers.containsStringは廃止されました(およびCoreMatchers.containsStringを参照)。
  • org.hamcrest.Matchers.containsString:NoSuchMethodError

そこで、読みやすいコードを作成しようとはしませんでしたが、代わりに質問で述べたシンプルで実行可能なアプローチを使用しました。

0
P Kuijpers