5

REST インターフェイスを使用するオープンソース プロジェクトに取り組んでいます。JUnit で残りのインターフェイスを検証する (実際の応答を期待値と一致させる) には、JSONAssert を使用します。( https://github.com/skyscreamer/JSONassert )。しかし、私は使用法に問題があります.親切にそれを解決するのを手伝ってください.

Expected JSON:
{
"objectId": "[^\\s]",
"protocol": "[^\\s]",
"hostName": "[^\\s]",
"port": "[^\\s]",
"commParams": "[^\\s]"
}

備考: objectId/protocol/hostName/port/commParams は何でもかまいませんが、空にすることはできません

Actual JSON:
{
"objectId": "controller2",
"protocol": "ftp",
"hostName": "sdnorchestrator",
"port": "21",
"commParams": "username:tomcat, password:tomdog"
}

Problem1: 上記の問題を解決するには、JSON Assert のどのインターフェイスを使用する必要がありますか?

JSONAssert.assertEquals("Expected JSON", "Actual JSON" new CustomComparator(
    JSONCompareMode.LENIENT_ORDER, new Customization(PREFIX, new        RegularExpressionValueMatcher<Object>())));

問題 2: ここで PREFIX は何にすべきか (" ", ". , " . " で試しましたが、成功しませんでした)

上記の問題に対するその他の推奨事項 (JSONAssert 以外) も歓迎します。

4

3 に答える 3

0

RE以外へのパスも取得できませんでした。最終的に、DefaultComparator の compareValues をオーバーライドして、RegularExpressionValueMatcher をすべてのパスに適用するよう強制しました。

import org.json.JSONException;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareResult;
import org.skyscreamer.jsonassert.RegularExpressionValueMatcher;
import org.skyscreamer.jsonassert.ValueMatcherException;
import org.skyscreamer.jsonassert.comparator.DefaultComparator;
import static org.skyscreamer.jsonassert.JSONCompareMode.STRICT;
    ...

final RegularExpressionValueMatcher reMatcher = new RegularExpressionValueMatcher();

JSONAssert.assertEquals( "{\"key\":\"v.*\"}", "{\"key\":\"value\"}",
    new DefaultComparator( STRICT ) {

        @Override
        public void compareValues(String prefix, Object expectedValue, Object actualValue, JSONCompareResult result) throws JSONException {
            try {
                if( !reMatcher.equal(actualValue, expectedValue) ) result.fail(prefix, expectedValue, actualValue);
            } catch( ValueMatcherException e ) { result.fail(prefix, e); }
        }

    }
于 2017-06-02T23:58:47.103 に答える