Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...
#概要 Spring Boot にて AuditorAware の機能を使用して作成日、更新日を設定していましたが、通常の SQL 実行時においてもデフォルト値として現在日時を設定するために columnDefinition にて既定値を設定するよう設定した結果、H2 データベースにテーブルが作成されなくなる現象が発生しました。 なお、MYSQL をデータベースに指定した場合、正常にテーブルが作成される動作になりました。 @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @Getter public class Audit implements Serializable { @CreatedBy private String createdBy; @CreatedDate @Column(nullable =
JUnit5が案外よさげなので、JUnit5を使うとどんな感じでテストが変わるのか考えてみます。 実際にどこが変わったかとか、使い方自体はいろいろまとめられたブログがあるし、公式ドキュメントも読みやすいのでそちらを。 http://junit.org/junit5/docs/current/user-guide/ メソッドごとのテスト JUnit5でいいのは、Nestedですね。 いままで、いろんなメソッドを対象にしたテストが入り混じってたと思います。 import org.junit.Before; import org.junit.Test; public class PurchaseTest { @Before public void setup() { // 全体のセットアップ // purchase()用のセットアップ // history()用のセットアップ } @Test p
もうちょっと規約的なものを「JavaでのUT作成基準を整理してみた」にもまとめてみました。 はじめに 去年、ブログの方に「ふつうのユニットテストのための7つのルール」という記事を書いたのですが、思ったより反響がありました。 あの記事で書いたのはあくまで原理・原則で、それを実現するためにはいくつかのテクニックが必要です。 特に、ああいうルールを作って「ユニットテストを書く事」を厳守するようにしても、 適切なテクニックを知らなければメンテが困難だったり、品質に寄与しなかったり、実行性能が悪いゴミが量産される可能性があります。 じゃあ、どうすれば良いかというと「最初からユニットテストが書きやすいように元のコードを設計する」ということです。 そう。まず身に付けるべきは「テストコードの書き方」では無く「テスト対象コード」すなわち「プロダクトコードの書き方」なのです。 また、ここで言ってる「最初から」
Mockito.reset(mockAppender); // Appenderの名前を設定 Mockito.when(mockAppender.getName()).thenReturn("MockAppender"); // Appenderとして利用できる準備ができていることを設定(下2行) Mockito.when(mockAppender.isStarted()).thenReturn(true); Mockito.when(mockAppender.isStopped()).thenReturn(false); // ROOTロガーを取り出し、Appenderの設定を行う。 LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfigu
【前提条件】 [環境] JDK 1.8.66 Spring Boot 1.3.3 [参考サイト] Spring-Boot の @RestController の単体テストを記述する 【概要】 Spring BootでResponseEntityExceptionHandlerをJUnitでも動かす方法です。 通常であれば例外ハンドラを意識せずにテスコードは書けます。 しかし、MockMvcBuilders#standaloneSetupを使う場合は自動で例外ハンドラが設定されないため、 テストコードのセットアップ時に少し設定が必要になります。 【サンプルコード】 サンプルコードはこちらにあります。 ブログのエントリ上ではかなり省略しているので、詳細が気になる方はサンプルコードをみてください。 【コントローラと例外ハンドラ】 対象となるコントローラと例外ハンドラのコードは下記のような感じです
JUnit5 の Alpha 版が公開されてたので、関西DDDに補欠になってしまった悲しみを紛らわすために使い方を調べた。 ※Alpha 版なので、今後変更されるかもしれません。 JUnit5 とは 言わずと知れた JUnit の次期バージョン。 Java 8 以上のみをサポートするようになり、 JUnit4 からは大きく変わっている。 でも、テストメソッドとか基本的な考えは変わっていない。 2016/02/06 現在、 Alpha 版が公開されている。 Hello World Gradle で使う方法(Maven でもいけるらしい)。 ビルドファイル buildscript { repositories { maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } dependencies { cl
package sample.assertj; import org.junit.Test; import static org.assertj.core.api.Assertions.*; public class MainTest { @Test public void test() { assertThat("hoge").isEqualTo("Hoge"); } } org.junit.ComparisonFailure: expected:<"[H]oge"> but was:<"[h]oge"> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstru
この表から解るように、一部の機能を除けばJUnit4の機能は継承されています。 したがって、JUnit4を理解していれば継承された機能をJUnit5に移行することは難しくないでしょう。 最初は多少の混乱はあるかと思いますが、すぐに慣れるレベルかと思います。 逆に、新しくJUnit5からJavaのユニットテストに入るのであれば、JUnit4の制約がないことは良い材料です。 特に、構造化テスト(ネストクラス)の時、JUnit4ではネストクラスをstaticクラスにすることを強いられていました。 これは、テストクラスをテスト毎に作成するという制約があったためです。 この制約がある以上、テストクラスからアウタークラスのインスタンス変数にアクセスできませんでした。 ユニットテストではテスト毎にテストインスタンスを作成することが原則なので、この制約は仕方ないと考えても良いでしょう。 しかし、テストがネ
概要 http://java-source.net/open-source/web-testing-tools で紹介されているテストツールを使用したテストの書き方をまとめてみました。 HtmlUnit 順当な感じです。 @Test public void homePage() throws Exception { final WebClient webClient = new WebClient(); final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); Assert.assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText()); final String pageAsXml = page.asXml(); Asser
みなさん、Serializable のテストってどうしてますか?? え、やってない?! まさか、そんな、ご冗談を... java.io.Serializable の実装は、見かけに反してとても難しいです。(少なくとも私はそう感じます。) どのような実装ミスの危険があるのか、どのようなテストをすべきなのか。 本稿から何回かに分けて、Serializable 実装クラスに対する JUnit テストについて考えてみたいと思います。 おさらい:シリアライズ/デシリアライズ クラスのインスタンスが使われている間、そのオブジェクトはヒープメモリ上に展開されています。このメモリ上に "モヤっと" 存在しているオブジェクトを、ファイルに保存したりネットワーク越しに送信したりしようとすると、一列のバイト列に変換してやる必要があります。 これがシリアライズですね。 逆に、オブジェクトをファイルから読み込んだり
メール送信はまだまだ業務で重要ですね。javaでメール送信をする処理をユニットテストしたいけどメールが大量に飛んでしまうのは困るし、誤って本番環境のメールアドレスにメールが飛んだら大変です。そんな時はwiserを使いましょう! SubEthaMail build.grade メール送信ユニットテスト 雑感 SubEthaMail GitHub - voodoodyne/subethasmtp: SubEtha SMTP is a Java library for receiving SMTP mail wiserができる事は以下の通りです。 jarのみで仮想SMTPを立てられる組み込みメールサーバ機能を持つ。 アプリケーションからwiserに投げられたメールは破棄される。 wiserは送信されたメールの内容を記憶しており、メールの宛先等が取得できる。 組み込みの仮想SMTPなので例えば以下
2018/6/13追記 jUtaime は JUnit5 の登場によりその使命を終えました。 長らくご愛顧ありがとうございました m(_ _)m みなさま JUnit5 を使いましょう。 What's an issue ? JUnitでの例外検証コードをもっとスッキリ書きたいっ! そう思っているのはきっと私だけではないはず・・・ before 例えば Person#setAge(int) なんていうよくあるメソッドを作ったとして、次の4点を検証したい。 setAge(-1) は NG → IllegalArgumentException をスロー setAge(0) は OK setAge(200) は OK : 超長寿社会の到来に備えて。 setAge(201) は NG → IllegalArgumentException をスロー、例外メッセージあり 通常のJUnit4ではこんな感じ
CircleCIでJUnitのテストを実施する場合、以下の2通りの方法で結果を参照することができるようです。 方法1. artifactに結果のhtmlファイルを保存する JUnitのテスト結果は通常 app/build/reports/tests 配下に出力されます。こいつをartifact配下に保存してやることで、CircleCIのConsole上で確認ができます。 artifactsとして保存するには以下をcircle.ymlに記載してあげます。 実行結果 CircleCIのartifact配下にファイルが保存されていることが確認できます。 index.htmlを開くと、結果が参照できます。 方法2. CircleCIのTest Failureレポートに表示する CircleCIではJUnitの結果で生成されるxmlファイルを読み取って、レポートとして表示することができます。やり方と
JUnitに追いつこう(2周回遅れ、男子一万メートルだと2分近くの差、箱根駅伝なら4分40秒の差)という趣旨のエントリーです。 要約はこっちを見るほうが早かった kyon-mm.hatenablog.com irof.hateblo.jp Parameterized Test Parameterized TestがこれまではIterable<Object[]>だったのが、Iterable<Object>になったらしい。で、これに合わせるかのようにIntelliJ IDEAもParameterized Testでテストデータごとに結果を表示・再実行できるようになってた。で僕は、これまでパラメタライズドテストする場合は、Iterable<Object[]>を嫌って@RunWith(Theories.class)でテストしてたわけで、IntelliJ IDEAがParameterized Tes
ネットの検索結果でチラチラとは見ていたのですが、この度初めて自分でもDBUnitを使ってみました。ネット上のサンプルコードをほとんどそのまま実行しただけですが、私の手元でも簡単にユニットテスト用のDBとデータを準備することができました。 従来、H2 DatabaseはRunScriptで初期化用のスキーマを流し込んでいたのですが、これならJDBCドライバを選ばない気がします。 ※ 他のJDBCドライバでH2 DatabaseのINIT=RunScript相当の機能が可能なのか知りません。 環境 DBUnit 2.5.1 JUnit 4.12 ユニットテストのコード(パクリですが) 以下のような感じです。Excelファイルもデータソースとして使える点は、仕事でプログラムを作る人にとってかなりのアドバンテージな気がします。 import java.io.File; import org.jun
事の起こり テストをしないでいることに耐えられず、むしゃくしゃしてやった。 反省はしているが後悔はしていない。 各種ダウンロード Pleiades All in One(Eclipse 4.4 Luna)1 諸般の事情によりUltimate Full Edition MySQL用のJDBCドライバ2 Platform Independent-ZIP Archiveをダウンロード このサイト3の下半分を参考にした JUnit/DBUnit関係のライブラリ ここ4を見ながらやればOK 取得したjarファイルは基本的にpleiades/eclipse/pluginsフォルダに入れて、プロジェクトごとにビルドパスを通している もっとうまいやり方があるのかもしれないのであとで探す データベースの準備 pleiades/xamppにあるsetup_zampp.batを実行 zampp_control.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く