20

これは非常に単純な質問のように思えますが、私には理解できません。

文字列が「string1」または「string2」に等しいと主張しようとしています。

これが私が試したものですが、どちらも明らかに機能しません。

assertEquals(d.getFormType(), "string1") || assertEquals(d.getFormType(), "string2");

assertEquals(d.getFormType(), "string1" || "string2");
4

6 に答える 6

32

Hamcrestマッチャーを使用することをお勧めします。これらは 経由で JUnit に統合されますが、 hamcrest-all.jarassertThat()もダウンロードしてインストールする必要があります。

Hamcrest を使用すると、次のように問題を解決できます。

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

assertThat(d.getFormType(), isOneOf("string1", "string2"));

Hamcrest をインストールできない場合は、正規表現を使用することもできます。

assertTrue(d.getFormType().matches("(string1|string2)"));

equals()これは、2 つのステートメントを組み合わせるよりも短く、間違いなく読みやすいです。

String actual = d.getFormType();
assertTrue("string1".equals(actual) || "string2".equals(actual));
于 2012-10-04T14:20:31.743 に答える
22

あなたが使用することができますassertTrue()

assertTrue(d.getFormType().equals("string1") ||
           d.getFormType().equals("string2"));

または、拡張バージョンを使用して、障害が発生した場合に詳細情報を提供します。

assertTrue("Unexpected value for d.getFormType(): " + d.getFormType(),
           d.getFormType().equals("string1") ||
           d.getFormType().equals("string2"));
于 2012-10-04T14:16:58.643 に答える
4

アサーション クラスには、必要なことを直接行う方法はありません。ただし、いつでもフォールバックしてassertTrue、必要な条件を確認できます。

assertTrue("string1".equals(d.getFormType()) || "string2".equals(d.getFormType()))
于 2012-10-04T14:17:41.907 に答える
1

どうですか

Assert.assertTrue("msg", Arrays.asList("string1", "string2").contains(searchString));

失敗した場合は、msg をわかりやすいメッセージに更新します。

于 2012-10-04T14:21:06.457 に答える
0

これを行う正確なJUnitスタイルはわかりませんが、うまくいくもっと簡単なことをします:

boolean stringEquals = false;
if ("string1".equals(d.getFormType()) || "string2".equals(d.getFormType())) {
    stringEquals = true;
}
assertTrue(stringEquals);
于 2012-10-04T14:17:45.990 に答える
0

あなたの質問は意味がありません。単体テストの結果は常に同じです。それらはランダムではなく、そうあるべきではありません。そのため、JUnit は交互の結果をサポートしていません。

出力が変わらないようにテストをセットアップする方法を見つけてください。

それが本当に不可能な場合は、コードまたは少なくともその設計に問題がある可能性があります。

これを修正してみてください。

本当にできない場合は、次を使用できます。

boolean valid = ....some complex check...
assertTrue( valid );

[編集]一度に複数の値をテストするには、次のトリックを使用できます。

String[] values = ...;
assertEquals( "0:...\n1:...",  "0:" + values[0] + "\n" + "1:" + values[1] ... );

つまり、すべての値を長い文字列に入れてから、文字列全体をチェックします。ほとんどの IDE は 2 つのテキスト エディターに違いを並べて表示するため、不一致は簡単に確認できます +0:テキスト内の小さなヒント ( 、...) により、エラーの場所が正確にわかります。

于 2012-10-04T14:19:10.803 に答える