この記事は カオナビ Advent Calendar 2021 12日目です。 はじめに 社内のAPI開発ではWebフレームワークとして gin、DIを行うために wire を使用しています。 (gin, wireについては割愛します) API開発をするプロジェクトではhttptestパッケージを使用したAPIのテストを重点的に書くようにしていますが、 wireを導入した際にtimeパッケージ等をモック化したテストがうまくいかず苦戦しました。 今回はAPI開発のプロジェクトにwireを導入した時に、モックを使ってテストを書けるようにする方法を書いてみます。 課題 wireのBest PracticesにはMockingについての記述があります。 書かれている通りに実装するとテスト専用のインジェクターを作成する必要があり、さらにテスト専用のルーティングも必要になってしまいました。 ルーティン
Choosing the right tool for the job is crucial. We tried our best to provide a comprehensive and unbiased comparison between Mock Service Worker and other open-source API mocking libraries below. The purpose of this page is not to reason about what technology is better or worse. All the libraries listed here have a place to be, and grading them is not only subjective, but also disrespectful toward
みなさん、フロントエンド開発時のモックサーバーは何を使っていますか?モックサーバーといっても様々なアプローチがあると思いますが、最近活用している MSW が便利だったので紹介します。MSW(Mock Service Worker)はブラウザリクエストを Service Worker がインターセプトし、任意のレスポンスを返すことが出来るライブラリです。 次の様な Express 風ハンドラーで、モックレスポンスを表現することができます。なんとこのコードがブラウザで動いてしまいます。 import { setupWorker, rest } from "msw"; const worker = setupWorker( rest.get("https://myapi.dev/csr", (req, res, ctx) => { return res( ctx.json({ title: "C
Mocking your SQL database in Go tests has never been easier. The copyist library automatically records low-level SQL calls made during your tests. It then generates recording files that can be used to play back those calls without connecting to the real SQL database. Run your tests again. This time, they'll run much faster, because now they do not require a database connection. Best of all, your t
golangでテストのためだけにinterfaceを書くのが死ぬほど嫌だったので編み出した技を紹介します。 TL;DR テスト(=mock)のためだけにinterfaceは切りたくない 型エイリアスとビルドタグを組み合わせるとinterfaceがなくてもモックが作れる この手法に必要なモックを自動生成するプログラムを作った interfaceは本当に必要なシーンで使うべき Background 現在モックを使った単体テストは一般的です。 Javaでの例を挙げると、モックしたいコンポーネントについて予めinterfaceを定義しておき、モックではそのインターフェースを実装するのが定石です。 しかしgolangのinterfaceはJavaなどのそれとは若干性質が異なるため、テスト=モックのためだけにinterfaceを書くのはオーバーワーク気味です。 そうテストのためだけにinterface
Moq is an Interface mocking tool for go generate — github.com/matryer/moqIn my recent talk about Idiomatic Go Tricks I talked about a testing technique that David Hernandez showed me where you can test code that has dependencies (described by an interface) while keeping the mock code inside the test it belongs to. You write a struct full of function fields that mirror the interface, and matching m
いい記事に感化されて僕も何か書きたくなった。 Golangにおけるinterfaceをつかったテスト技法 | SOTA リスペクト: Big Sky :: golang で終了を確認するテストの書き方 GolangでAPI Clientを実装する | SOTA Big Sky :: GolangでAPI Clientを実装する、の続き 今週のやつではなく先週のです.今週のは特に知見がなかった…grpc-goとか使えたらクライアント勝手に生成されるしいいよねgrpc流行ると便利そう(感想) くらい Golangにおけるinterfaceをつかったテスト技法 | SOTA めっちゃいいなーと思ったんですが,テスト用 の mock を気軽に作るテクニックはあまり詳しく紹介されてなかったのでそのあたりの1つのテクニックを書きたい. 前提 僕もテストフレームワークや外部ツールは全く使わない.標準のt
This is a quick tutorial on how to test code using the GoMock mocking library and the standard library testing package testing . GoMock is a mock framework for Go. It enjoys a somewhat official status as part of the github.com/golang organization, integrates well with the built-in testing package, and provides a flexible expectation API. The code snippets referenced in this post are available on
OverviewWe all use a lot of packages when constructing our applications, both internally developed and third party packages. This blog post will show how you can easily mock these packages using mockery and stretchr/testify/mock. Let’s dive into it; An exampleWhen writing unit tests for our code we might find the external packages problematic. Consider this case: import "github.com/mediocregopher/
モンキーパッチというのは,オリジナルのソースコードを変更せずに実行時にコードを拡張したり変更したりする手法のことです.動的言語で見かけるようなモンキーパッチを golang でもやってのけることができます(って,そういうライブラリを作っちゃった人がいます! 手法については,ライブラリの作者による詳説をご覧ください. Monkey Patching in Go ざっくり言うと,メソッドの開始アドレスをすげ替えて他のメソッド呼び出すようにするという感じのものです. なので, セキュリティ厳しいOSでは動かない. スレッドセーフじゃないし,そもそも何もセーフじゃない. ということにご注意ください. 動かなくても文句は言わない.ただし,時々動作がおかしくなるようなら go test -gcflags=-l のようにフラグをつけてみるといいかもしれません. かなり黒魔術ですが,テストでどうしてもモッ
今のプロジェクトでAWS(S3)使ってて単体テストでも依存してたので、S3クライアントをモックにする方法を調べた。ソースはこちら。 通常はtype S3 structを使うがtype S3API interfaceというインタフェースが用意されているのでテスト時はこのインタフェースを実装したモックにすげ替える。 モックツール "gomock" あまりスターがついてないけど割りと古くからあってシンプルで使いやすかったので https://github.com/golang/mockを使ってみる。 インストール $ go get github.com/golang/mock/gomock $ go get github.com/golang/mock/mockgen $ go get github.com/aws/aws-sdk-go // mock target モック作成 $ mockge
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く