You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
Webアプリケーションサーバーに何か大きな変更をしたいけど、既存のテストだと心許なかったので各エンドポイントにHandlerからのテストを追加することにした。 ただ全部のテストを自分1人で作っていくのはボリューム的に現実的ではなかったので、どうしたらチーム全員が書きやすいテストになるか考えて色々と整備してみた。 テストの書き方がある程度決まっている 期待する結果(want)を全て書かなくても良い テストの前後で必要な処理がわかる 具体例 テストの書き方がある程度決まっている エンドポイントごとにスタイルがバラバラだと都度どう書くか考えなければいけなくなってしまうため、基本的にはリクエストとレスポンスだけテーブルに指定するスタイルが良さそうだと考えた。 簡略化すると以下のような形式。 func TestFoo_Get(t *testing.T) { tests := []struct { n
はじめに time.Now関数を用いたコードをテストする場合、テスト対象のコードに次のような変更を加える必要があります。 引数に現在時刻を渡す パッケージ変数やフィールドなどに現在時刻を返す関数やインタフェースを設定する context.WithValue関数でコンテキストに現在時刻を設ける どの方法を用いてもプロジェクトの初期から考慮する必要があります。途中で変更するとなると修正が箇所を漏れなく探し出す必要があります。また、パッケージ変数に現在時刻を返す関数を設定した場合、テストを並列に実行することを諦める必要が出てくるでしょう。 このような課題を解決するために、testtimeというライブラリを作成しました。 テストの並列実行と時刻の固定 次のようにパッケージ変数を使ってtime.Now関数のラッパーの挙動を変えてテストする手法があります。 var nowFunc func() tim
Unit testing is a way of writing tests for the individual components (aka, the smallest part) of a program. The purpose of it is to validate that any piece of code is always working as expected. Moreover, unit testing has a lot of advantages such as improving the quality of code, providing documentation, also the code can be tested individually and doesn’t require another module in order for it to
この記事は 3/27 に開催されたCAMPHOR- DAY内で発表した内容を元にした記事です。 アーカイブはこちら(共有してるスライドの画面が黄色くなっていることは終わってから知りました🥺) この記事では gomock や mockgen の基本的な使用方法から、 gomock の内部の動きまでを紹介します。この記事を読み終わったあなたは思わずgomock 完全に理解した と言っていることでしょう。 基本的にGoの文法を知っていればgomock自体を知らなくても理解できるような説明にしているつもりです。 この記事ではv1.5.0の仕様をもとに話しています。 golang/mock(gomock) とは go 公式が出しているインターフェース定義からモックの生成を行うことができるライブラリです。 生成したモックを扱うパッケージも含まれます。 この先の説明では gomock と呼ぶことにしま
こんにちは。 京都開発拠点でGoエンジニアをしています @yoskeoka です。 Goを中心技術として性能改善やプロダクト間を横断するような機能の設計、実装を行うKTAチーム (京都開発本部 テクニカルアーキテクトチーム) 所属です。 突然ですが、皆さんはGoでテストを書いているでしょうか。 我々はテストを書くことが中長期的なスピードアップに繋がると信じて日々テストを書くようにしています。 KTAではGoの実装をする際にClean Architectureの考えに基づいたpackage分けを行っていますが、packageを分けたり、インターフェースを定義したりとしていくと、テストを書くのが難しい部分というのが出てきます。 そんな場合に使えるモック作りテクニックを今回は紹介したいと思います。 Clean Architectureはテストしやすくなると言うが Clean Architectu
はじめに これは Go 4 Advent Calendar 2020 8日目の記事です。 Goのテストにおいて、構造体を含めて型の値を比較したいという場合は往々にしてあります。ロジックの結果はなんらかの値として作用することが多いですから、型の値を比較したい、というのは自然です。私は型の値が等価であるかどうか判定するために、go-cmp というライブラリを使うことが多いです。 github.com しかしGoにおける等価性の仕様は決まっていますし、標準ライブラリの reflect パッケージにも DeepEqual という deeply equal, かどうか判定するメソッドがあります。そこで本記事ではなぜわざわざ go-cmp を使っているのかという理由と、go-cmp を使ったときにどのようにして使うか?という go-cmp の使う上でよく使う以下のTipsを提供したいと思います。 Ti
https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIやGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -
この記事は、Merpay Tech Openness Month 2020 の6日目の記事です。 メルペイでBackendエンジニアをしている柴田(@yoshiki_shibata)です。この記事では、Go言語のtestingパッケージに用意されている並列化の機能について説明します。 Go言語では、テストコードを作成するためのtestingパッケージが用意されています。一般に開発するソフトウェアの規模が大きくなるに従って、作成されるテストコードの量も多くなり、すべてのテストが終了するまでの時間も長くなっていきます。特に、データベースへアクセスするようなテストでは、データベースへの通信時間がテスト時間の多く占めますので、テストコードを逐次実行するよりは並列実行することで、テスト時間を短縮できます(厳密には用語「並行」ですが、t.Parallel()メソッドの説明なので、この記事では用語「並列
【解説】開発ライブ実況 #1 (Vim / Go) 編 by メルペイ Architect チーム Backend エンジニア #mercari_codecast Merpay Architect / Mercari Microservices Platform チームの伊藤です。この記事は Merpay Tech Openness Month の3日目の投稿となります。本稿では、先日開催した開発ライブ実況のイベントで紹介した筆者の開発環境(Vim / Go)について、言語に依存しない「全般的な設定」と「Goの設定」の2つに大別して解説します。Vim に関する話題が多いですが、Go のために自作したツールについての解説はエディタに依存しないので、他のエディタを利用している方々もぜひご一読ください。 開発ライブ実況とは 「他人の開発風景を覗いてみよう!」というコンセプトのもとに弊社が開催して
Go 1.14 で testing パッケージに新しく t.Cleanup(func()) や b.Cleanup(func()) が導入されました。 最初は今まで defer を使っていたところを置き換えられるくらいしか良いところがないかな〜と思っていましたが、想像以上に柔軟な使い方ができるので今まで使用したパターンを書いておきます。 Cleanup の特徴 テストランナーは panic ハンドラがあるので、Cleanup は panic が起きたとしても常に呼び出されます。例えば、以下のコードではちゃんと called が出力されます。 func Test_main(t *testing.T) { t.Cleanup(func() { fmt.Println("called") }) panic("") } The Go Playground 別 goroutine で panic し
こんにちは。READYFOR 株式会社で SRE として働いている ジェダイ・パンくず🚀 と申します。 突然ですが、皆さんの現場ではインフラのテストの仕組みは導入済みですか?我々はまだ出来ていません(笑)。 READYFOR では IaaS として AWS を、IaC として Terraform を導入しているのですがコードのテスト・コードによってデプロイされた状態のテストを何かしらの仕組みを使って実践したいなぁと考え、今調査している最中です。 今回は Terraform のテストを書くツール Terratest について調べた内容を皆さんに共有したいと思っています。また AWS の状態をテストする仕組みとしてよく知られている Awspec との比較も行っていきたいと思っています。 必要になるモノ 事前に必要になるソフトウェアの一覧です。 Golang (requires version
昨年Go1.10時点でのGoのテストについてまとめた。 Goのtestを理解する in 2018 #go まとめ記事を書いた後にリリースされたGo1.11からGo1.13に含まれるテスト関連の変更をまとめる。 TL;DR Go1.10までのテスト関連の機能、基本的な書き方は以下にまとめてある Goのtestを理解する in 2018 #go Goのtestingを理解する in 2018 - Examples編 #go Goのtestingを理解する in 2018 - quickサブパッケージ編 #go Goのtestingを理解する in 2018 - iotestサブパッケージ編 #go Go1.11に含まれるテスト関連の変更は以下の通り go test実行時のgo vetの挙動の修正 -memprofileオプションがデフォルトでアロケートしたメモリを記録するようになった Go1.
http://gunosygo.connpass.com/event/8485/ Goのテストに関する話を聞いてきました。 テスト周りは正直まだまとめ記事読んだ程度しかキャッチアップできていなかったので、周囲がどんな方針でテストしているか、とかも含めて勉強したいと思っていたところ、ちょうどいいタイミングで勉強会があったので参加してきました。 まとめと感想 先に。 みんなわりと、素直にGoの用意した仕組みに則ってやってる。 とはいえAssertionないのつらいよね、とか、mockの再実装辛いよね、というのは皆思ってるみたい。 Web APIで使ってます、というパターン多いみたい。 最終的に懇親会ではインフラの方とopsworksの話で盛り上がってた(ノ∀`) というわけで、以下メモ。資料URLが見つかったものは貼ってます(`・ω・´) Goのテストの基本 t_matsuwitterさん そ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く