web-dev-qa-db-ja.com

単体テストのパラメーターとしてのAnyString()

テストのないレガシーアプリケーションを処理する必要があります。したがって、リファクタリングを開始する前に、すべてがそのまま機能することを確認したいと思います。

ここで、次の状況を想像してください。

public SomeObject doSomething(final OtherObject x, final String something) {
    if(x == null) throw new RuntimeException("x may not be null!");
    ...
}

ここで、そのnullチェックをテストしたいので、それが機能し、リファクタリングしたときに失われないことを確認します。

だから私はこれをしました

@Test(expected = RuntimeException.class)
public void ifOtherObjectIsNullExpectRuntimeException() {
    myTestObject.doSomething(null, "testString");
}

さて、これはもちろん機能します。

しかし、「testString」の代わりに、ランダムな文字列を渡したいと思います。

だから私は試してみました:

@Test(expected = RuntimeException.class)
public void ifOtherObjectIsNullExpectRuntimeException() {
    myTestObject.doSomething(null, Mockito.anyString());
}

しかし、これは許可されていません。

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:...検証またはスタブ以外で引数マッチャーを使用することはできません

これの意味は理解できますが、テストなどをパラメータ化せずに、やりたいことができるのではないかと思います。私が使用できるライブラリは、Junit、AssertJ、Mockito、Powermockだけです。

何か案は?

3
Sorona

さて、私はmockitoの知識があまりありませんが、いつでも独自のランダム文字列ジェネレータを作成できます。多分それはうまくいくことができ、uはその中のより多くのタイプの入力を変更することができます

1
Jashan Preet