29
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HRBrainAdvent Calendar 2023

Day 19

単体テストもlintを通そう

Last updated at Posted at 2023-12-18

はじめに

こんにちは!
株式会社HRBrainでエンジニアをしているZamaです。
この記事はHRBrain Advent Calendar 2023 カレンダー2の19日目の記事です。

前提

HRBrainでは

  • Goを用いてバックエンドの開発を行っており、
  • lintにはgolangci-lintが使われ、
  • 単体テストのassertionにはtestifyが使われることが多いです。

単体テストがlintの対象でなかった

先日golangci-lintの設定ファイル(.golangci.yaml)を覗くことがあり、そこでtests: falseという記述を見つけました。

何だこれ?と確認してみると、

# Include test files or not.
# Default: true

とのことで、単体テストがlintの対象になっていなかったことが分かりました。

たしかに思い返すと単体テストの記述についてlintで指摘された覚えがなく、このためだったのかと納得するとともに、じゃあtrueにしてみようぜとなるのがエンジニア。

見事に真っ赤になりました。
golangci-lint様がお怒りです😡

testifylintとの出会い

これはよろしくないと指摘を確認していくと、require-errorという見慣れない指摘がありました。

エラーが必要?何かエラーハンドリングの間違いかな?とググってみるとtestifylintというGitHubのレポジトリが出てきました。

そしてこのような記述が...

スクリーンショット 2023-12-14 14.25.53.png

どうやらtestifyのスマートな使い方を教えてくれているようです。
下記はたしかにそういうassertionを簡単に書けたらと思っていました。

testify/require allows to stop test execution when a test fails.

これはすてきなものを見つけたぞとREADMEを読んでいくと、Problem statementというセクションに次のような記述がありました。

testify is the most popular Golang testing framework in recent years. But it has a terrible ambiguous API in places, and the purpose of this linter is to protect you from annoying mistakes.

激しく同意です。

このtestifylintgolangci-lintのgo.modに含まれており、lint時に実行されていたようです。

チェック項目

このtestifylintにはv1.0.2の時点で14個のチェック項目があります。

  • bool-compare
  • compares
  • empty
  • error-is-as
  • error-nil
  • expected-actual
  • float-compare
  • go-require
  • len
  • nil-compare
  • require-error
  • suite-dont-use-pkg
  • suite-extra-assert-call
  • suite-thelper

上述のrequire-errorの他に助かりそうなものとしては

compares

スクリーンショット 2023-12-14 15.25.43.png

empty

スクリーンショット 2023-12-14 15.25.52.png

expected-actual

スクリーンショット 2023-12-14 15.26.07.png

などがあります。

このtestifylintさんの力を借りて、単体テストを今後きれいにしていこうと思います!

まとめ

単体テストのファイルもlintの対象にしましょう。
lintによってはテストライブラリーの上手な使い方を教えてくれます。

単体テストはとても大事ですが、実際のコードを書いている時間と同じくらい、場合によってはそれ以上の時間を要することがよくあります。
それだけ時間をかけて書いたものなので、lintでさらに磨きをかけてPUSHしてやりましょう!

まあ、もうAIさんが色々いい感じに書いてくれる時代ではありますが...

We are hiring!

株式会社HRBrainでは、Power to the peopleを合言葉に多種多様な人事課題を解決するプロダクトを開発・運営しています。
日本の労働環境を良くしてやるぜ!みんなが元気に活躍できる社会にしてやるぜ!
そんな熱い気持ちを持った方、一緒に働きませんか?
皆様のご応募をお待ちしております!

29
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?