Java

Java11 HttpClient SSL サンプル

サンプルといっても完成形ではないが。。。 import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.net.http.HttpClient; import java.securit…

XStream を使う

XML読み書き、Java Object との相互変換に何を使う?で問われてだいたいは、JAXB を挙げる。 他の選択肢は?で XStream を挙げてくれる人は少ない。 5年前に、XStream を知ってその頃は、あまり活発でなかった。しばらく触れる機会がなかったが、 2022年1…

Guice Injector の mock

モックインスタンスを guice でインジェクションさせるパターンは、ネット検索すれば、 たくさん見つかる。 しかし、Injector の生成メソッド Guice#createInjector をモックしてテスト用の Injector を生成させるパターンは 見たことがない。 MockedStatic …

Objects.requireNonNull

安易というかまだまだ、if 文で null かどうかをチェックすることが多い Objects.requireNonNull で、NullPointerException を発生させるスタイルは なぜか、あまり見ない。もっと使えば良いと思うのだが。。。java.util.Objects public static T requireNon…

hamcrest-json のチェック処理メソッドを使いやすくする

hamcrest-json を JUnit 以外で使用する - Oboe吹きプログラマの黙示録 と、書いたがもっと実践的なものにする。Maven pom.xml に追加する <dependency> <groupId>uk.co.datumedge</groupId> <artifactId>hamcrest-json</artifactId> <version>0.2</version> </dependency> AssertionError を捕まえてエラーメッセージを、ラムダ(Consumer)で処理する…

hamcrest-json を JUnit 以外で使用する

2つのJSONを比較するのに、JUnit だけで使用するのはもったいないと思った。 <dependency> <groupId>uk.co.datumedge</groupId> <artifactId>hamcrest-json</artifactId> <version>0.2</version> </dependency> このようにテストスコープを外して使用 安易であるが比較メソッドも以下のように用意する。 import org.hamcrest.MatcherAssert; import uk…

InputStream から読み取って String

ほとんど多くの現場で、ほぼ同じコードを書くことが多くて 煩わしいと思ったので、メモ。ByteArrayOutputStream を使うのがいいのか?それとも BufferedReader を使うのが いいのか?迷うところではある。ByteArrayOutputStream を使う // InputStream → toS…

okhttp の MockWebServer で指定する Dispatcher でリクエストカウントを参照

oboe2uran.hatenablog.comvoid okhttp3.mockwebserver.MockWebServer.enqueue(@NotNull MockResponse response) は、キューとして応答レスポンスを登録するので返す順番にこれを呼べばよかった。Dispatcher の方法で、リクエストカウントを判断したい MockWe…

JUnit JSON を検証したい

JUnit テストで生成されるJSON を期待値 JSONテキストと比較して検証したい。 hamcrest-json というのを使うとできる。Hamcrest Related Projects ここから、 GitHub - hertzsprung/hamcrest-json: Hamcrest matchers for comparing JSON documents を辿ると…

JUnit 実行で、ログファイルをテストケース毎に保存させる。

org.junit.rules.TestName から実行時のテストケースメソッド名を取得して メソッド名のディレクトリにログ出力をテストケース単位にログファイルとして保存します。SL4J + log4j2 を使用している場合と、SL4J + logback を使用している場合、 各々退避方法…

JSON シリアライズ時のソート

Java Jackson を使用した時のシリアライズのソートの話である。 @JsonPropertyOrder を使わないで、ObjectMapper の設定として指定する方法Java Object プロパティ順(フィールド宣言順) Jackson version >= 2.6.1 ObjectMapper mapper = new ObjectMapper(…

Jackson シリアライズで、null オブジェクトを出力させない

一律に全て、null オブジェクトを出力させない import com.fasterxml.jackson.annotation.JsonInclude.Include; Include.NON_NULL を設定する。 ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL);

Jackson JSONシリアライズ実行で、null を空文字にする

汎用的にシリアライザを設定するのが賢い com.fasterxml.jackson.databind.JsonSerializer 実装を com.fasterxml.jackson.databind.ser.DefaultSerializerProvider で、約束して ObjectMapper に登録する。DefaultSerializerProvider が抱える public final …

JUnit 用のログ設定を行う

リリース用のログ設定ファイル、 logback 使用の場合 → logback.xml log4j2 使用の場合 → log4j2.xml これを src/main/resources に配置するが、Junitテスト用のログ設定を別に用意したい時、、、 import org.junit.BeforeClass; システムプロパティで、設定…

@ImplementedBy VS TypeLiteral

Google guice のインジェクションバインド定義で、 com.google.inject.TypeLiteral は、良くこのように使用される。 Injector injector = Guice.createInjector(new AbstractModule(){ @Override protected void configure(){ binder().bind(new TypeLiteral<List<String></list<string>…

Javaで、JSONキーによるシリアライズ時のソート

このようなクラスオブジェクトが存在したとします。 import java.io.Serializable; import lombok.Data; @Data public class Person implements Serializable{ private static final long serialVersionUID = 1L; private String name; private String alias…

MockWebServer POST に対応する

HttpClient 実行を含むJUnit で、Mockwebserver を使う - Oboe吹きプログラマの黙示録okhttp の Mockwebserver で、複数リクエストに対応する - Oboe吹きプログラマの黙示録ここまでくると、次はPOST送信された内容に対するレスポンスの設定である。 okhttp3…

okhttp の Mockwebserver で、複数リクエストに対応する

okhhtp3 の Mockwebserver の使い方の問題ですが、 Mockwebserver 1回の enqueue(MockResponse response) メソッドの設定だけでは、 2回リクエストを実行すると2回目は応答しなくなる。 解決方法は2通り。 enqueue レスポンス設定をリクエストの回数分実…

HttpClient 実行を含むJUnit で、Mockwebserver を使う

Square社が開発した Apache License2.0 の OkHttp を使う <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>mockwebserver</artifactId> <version>4.0.1</version> <scope>test</scope> </dependency> Java11 HttpClient を使ったテスト対象プログラム(省略して書いてます) @Inject @Named("BASEURL") private String baseURL; URL path の …

HttpClient.Redirect.SAME_PROTOCOL → NORMAL

もうだいぶ年月がたってしまった、Java9 で HttpClient インキュベーター Java11 で HttpClient 正式リリース 昔書いた、Java9 の HttpClient を試す - Oboe吹きプログラマの黙示録 この中で HttpClient.Redirect.SAME_PROTOCOL「同じプロトコルのみにリダイ…

HttpClient のモックを書くとしたら、、

Java11 の HttpClient のモックを書くとしたら、 だいたいこんな感じかな。。。 @Test public void case1() { try{ HttpResponse<Object> resp = Mockito.mock(HttpResponse.class); HttpClient client = Mockito.mock(HttpClient.class); Mockito.when(resp.body())</object>…

厳格な日付読み取りで良い方法は。。

存在しない日付の読み取り String strdate = "20230931"; LocalDate dt = LocalDate.parse(strdate, DateTimeFormatter.ofPattern("yyyyMMdd")); 2023-09-30まあ、これは想定される好ましくない方法 DateTimeFormatter に、ResolverStyle.LENIENT を指定する…

JUnit の mockito thenAnswer を lambda で

先日書いた、 JUnit mockito の return を遅らせたい(時間を掛けたい) - Oboe吹きプログラマの黙示録よく考えたら thenAnswer は、lambda で書けましたね。。 Mockito.when(foo.getAgent(Mockito.contains("a"))).thenAnswer(new Answer<String>() { @Override pub</string>…

JUnit mockito の return を遅らせたい(時間を掛けたい)

変なテスト要求仕様であるし、こんなこと通常しないかもしれないが、リターン値を when で書くメソッドの引数の条件以外の条件で分岐させる時に応用できるかもしれない。通常、String 1個の引数メソッドのモック Mockito.when(テスト対象Class.メソッド(Mock…

JUnit 実行用の log4j2 設定を指定する

JUnit テストケースコードで、log4j2 の log4j.configurationFile 属性を書きかえれば良い。 以前、 oboe2uran.hatenablog.com を書いて悩んだが、 開発 IDE を Eclipseを使っているのであれば、、 test/resources/ の下に、JUnit で実行する時のための log4…

JUnit で、実行中のメソッド名を取得

JUnit で、@Before 付与したテストケースの前に動くメソッド内で、 これからテスト実行するテストケースメソッド名を取得する。JUnit で、@After付与したテストケースの後に動くメソッド内で、 テスト実行したテストケースメソッド名を取得する。 という場合…

スレッドプールの状況

先日書いたサンプル、 oboe2uran.hatenablog.com のようなケースで、待ち合わせ時にスレッドプールがどういう状況かを知りたい場合がある。単純であるが、Executors.newFixedThreadPool で作成したものを ThreadPoolExecutor でキャストすれば良い。 ThreadP…

JMockito を使う場合の注意

JUnit のモックは、org.mockito を使うことが多いのであろうか。 mockito-core と、mockito-inline を Maven pom.xml で依存関係を指定して使ったりする。 Mockito.when(~メソッド実行).thenReturn(リターン値); などを良く書いていたものだ。JMockito の書…

CompletableFuture を使って生成した複数スレッドを待ち合わせる。

Runnbale のタスクと Future のタスク、それぞれのサンプルコードを書いてみた。 以下、どちらもそうなのだが、 CompletableFuture の allOf メソッドが可変長引数で、リスト等のコレクションを指定できないので、 しかたなく、toArray(CompletableFuture[]:…

Java からシェルを実行

昔、Process を作成して動かすものを、yipuran-core に載せてあるが、近々、削除して 書き直そうと思っている。 以下のように、標準出力も標準エラー出力も区別なく結果として取得した方が 良いのではないかと。。。 public class ScriptExecutor{ private M…