18

クラスをモックしている単体テストがありjava.net.URIます。NonStrictExpectationさらに、特定の文字列を呼び出して返すことを期待している jMockit を作成していURI.getPath()ます。

テスト対象のコードは 2 回呼び出さURI.getPath()れ、毎回異なる文字列を送信する必要があります。

テスト中の私の実際の方法は次のとおりです。

public void validateResource() {
    // some code
    URI uri = new URI(link1.getHref());
    String path1 = uri.getPath();
    // some more code
    uri = new URI(link2.getHref());
    String path2 = uri.getPath();
}

ユニットテストコードは次のとおりです。

@Mocked URI uri;

@Test
public void testValidateResource() {
    new NonStrictExpectations() {
        {
            // for the first invocation
            uri.getPath(); returns("/resourceGroup/1");

            // for the second invocation [was hoping this would work]
            uri.getPath(); returns("/resource/2");
        }
    };
    myObject.validateResource();
}

今、私は が 2 回目に呼び出され"/resource/2"たときに、私の期待から返されたいと思っています。URI.getPath()しかし、それは常に最初の期待値に達し、 を返します"/recourceGroup/1"。これは私の問題です。

どうすれば実現できますか?StrictExpectationsいろいろな理由であまり使えないので、使い続けるしかありませんNonStrictExpectations

4

1 に答える 1

30

一度リストuri.getPath()して、varargs バージョンのreturns... 次のようなものを使用するだけでよいようです。

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2");

とにかく、これはドキュメントによると...私は自分でテストしていません。

returns(v1, v2, ...) メソッドを呼び出すことにより、期待値に対して返される複数の連続した値を記録できます。または、結果フィールドに連続する値を含むリストまたは配列を割り当てることによって、同じことを実現できます。

于 2012-10-23T04:46:02.017 に答える