Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jy8752/go-unittest-architecture
単体テストの考え方/使い方を読んで、テストの書き方、アーキテクチャについて再考するためのリポジトリ。
https://github.com/jy8752/go-unittest-architecture
e2e go golang golden-test gomock integration test unittest
Last synced: 7 days ago
JSON representation
単体テストの考え方/使い方を読んで、テストの書き方、アーキテクチャについて再考するためのリポジトリ。
- Host: GitHub
- URL: https://github.com/jy8752/go-unittest-architecture
- Owner: JY8752
- Created: 2023-10-29T12:40:29.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-04T12:11:18.000Z (about 1 year ago)
- Last Synced: 2023-11-04T16:25:10.898Z (about 1 year ago)
- Topics: e2e, go, golang, golden-test, gomock, integration, test, unittest
- Language: Go
- Homepage:
- Size: 367 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-unittest-architecture
[単体テストの考え方/使い方](https://www.amazon.co.jp/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9-%E4%BD%BF%E3%81%84%E6%96%B9-Vladimir-Khorikov/dp/4839981728)を読んで、テストの書き方、アーキテクチャについて再考するためのリポジトリ。モック、クリーンアーキテクチャを使わないような構成で簡単なAPIを書いてみる。
## 今回作るAPI
例の如くガチャのシュミレーションAPIを作成する。
- ガチャを抽選する(ランダム性のテスト)
- ガチャの決済APIを呼び出す(プロセス外依存を含んだテスト)### Architecture
### DB
### EndPoint
#### ```/gacha/:gachaId/draw```
指定のガチャからアイテムを抽選する。
##### パスパラメーター
- gachaId ガチャID
##### HTTP メソッド
POST
##### Response
```
% curl -XPOST localhost:8080/gacha/1/draw | jq
{
"id": 2,
"name": "item2",
"rarity": "N"
}
```## 作成するテスト
### 単体テスト
- ガチャの抽選ロジック
### 結合テスト
以下の一連の呼び出しをテスト
- ガチャデータの取得 -> ガチャの抽選 -> 抽選したアイテムデータの取得 -> (決済APIの呼び出し)### E2E
ゴールデンテストを使用してAPIリクエストからレスポンス取得までの一連の流れをテスト
## stack
- [wire](https://github.com/google/wire) 依存性の解決
- [sqlboiler](https://github.com/volatiletech/sqlboiler) ORM
- [golang-migtate](https://github.com/golang-migrate/migrate) マイグレーション
- [Taskfile](https://taskfile.dev/ja-JP/) タスクランナー
- dotenv + direnv 環境変数の管理- [testify](https://github.com/stretchr/testify) アサーションに
- [dockertest](https://github.com/ory/dockertest) 結合テスト用にDB準備
- [gomock](https://github.com/uber-go/mock) モック
- [goldie](https://github.com/sebdah/goldie) ゴールデンテスト- Go1.20
- MySql
- docker### wire
#### install
```
go install github.com/google/wire/cmd/wire@latest
```### golang-migrate
#### install
```
brew install golang-migrate
```### sqlbiler
#### install
```
go install github.com/volatiletech/sqlboiler/v4@latest
go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-mysql@latest
```### Taskfile
#### install
```
brew install go-task
```### gomock
#### install
```
go install go.uber.org/mock/mockgen@latest
```## Task
```
% task
task: Available tasks for this project:
* generate: execute `go generate` command. generate mock by `gomock` and di by `wire`.
* hello: Hello Test Task.
* db:connect: Connect MySQL container.
* db:run: Run MySQL container.
* db:stop: Stop MySQL container.When stop, container remove.
* generate:di: execute `wire gen` command.
* migrate:create: Create migration file.Migration name must be specified as an argument.ex) task migrate:create -- create_user_table
* migrate:down: Execution migration down.
* migrate:force: Execute force migration version.Migration version must be specified as an argument.ex)task migrate:force -- 2
* migrate:up: Execution migration up.
* migrate:version: Check current migration version.
* test:all: execute all tests.
* test:e2e: execute e2e tests.
* test:integration: execute integration tests.
* test:unit: execute unit tests.
* update:golden: update golden file.
```