0

プロジェクトにエンコーディング ベースの単体テストがあります。Eclipse ではテストに合格しますが、Maven では失敗します。

すべてのファイルは UTF-8 でエンコードされており、pom.xml に次の 2 行を追加しましたが、テストは失敗し続けます。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

ここがテストの興味深い部分です。Credentialsgetter/setter を使用してパスワードを文字列として保存する単純な Bean です (他のコードはありません)。

AuthentificationHelper helper = new AuthentificationHelper();
// ...
String password = ":&=/?é$£";
String base64Hash = Base64.encodeString(login + ":" + password);
final String authHeader = "Basic " + base64Hash;
// ...
Credentials credentials = helper.credentialsWithBasicAuthentication(request);
assertEquals(password, credentials.getPassword());

credentialsWithBasicAuthentication、ここで行われていることの逆の操作を行います。

StringTokenizer st = new StringTokenizer(authHeader);
//...
String credentials = new String(Base64.decodeBase64(hashedCredentials), "UTF-8");
int p = credentials.indexOf(":");
//...
String password = credentials.substring(p + 1).trim();
return new Credentials(login, password);

Maven の出力は次のとおりです。

Failed tests: 
   testCredentialsWithBasicAuthentication: expected:<:&=/?[?$?]> but was:<:&=/?[?$?]>

(これが関連しているかどうかはわかりませんが、log4j アペンダーも UTF-8 でデータを出力するように構成されています)

何が問題なのですか?(驚くべき部分は、コンソール出力も適切に表示されないことです)

SOLUTION(恥ずかしい)

私が使用していたBase64クラスは、Apache Commons が提供するものではなく、ランダムなものでした。

交換:

import random.bla.bla.Base64;
// ...
String base64Hash = Base64.encodeString(login + ":" + password);

import org.apache.commons.codec.binary.Base64;
// ...
String base64Hash = Base64.encodeBase64String(new String(login + ":" + password).getBytes("UTF-8"));

問題を解決しました。

咳、咳、タンブルウィード。

4

2 に答える 2