みなさん、こんにちは。プラットフォーム部MobileチームのEMをやっていますオダギリです。 突然ですが、みなさん、UnitTestは書いていますか?我々スパイダープラスのプロダクトでもUnitTestは行っています。 今回、プロダクトの品質向上のために、改めてUnitTestについて調べましたので、皆様にも共有できればと思います。 What’s UnitTest? UnitTestは、アプリケーションやプログラムの個々の要素(今回はメソッド)を独立してテストし、その動作が正しいかを確認するテスト手法です。
概要 NUnitなどでUnitTestを書く場合に、インターフェース部分にモックを与えるためにMoqを使っている人は多いと思います。これの意外な弱点として、拡張メソッドをモック化することができません。すると、GenericHost(DI)の使い方次第では頻出となるIServiceProvider.GetRequiredService()などをモックにできず、テスト困難になる場合があります。一工夫してこれをモック化する方法を紹介します。 最初に結論まとめ 次のようなアダプタクラスを自作し、これを間に挟む(テスト対象クラスへDIで渡す)事で、実現できます。 internal class IServ…
概要 今まで当たり前のようにJUnitを使用してユニットテストを実行してきたが、 それがどんな仕組みで動いているのか考えたことがなかったので調べてみた。 環境 java openjdk 21.0.4 2024-07-16 LTS OpenJDK Runtime Environment Corretto-21.0.4.7.1 (build 21.0.4+7-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.4.7.1 (build 21.0.4+7-LTS, mixed mode, sharing) 問題の所在 例えば、以下のようなサンプルプロジェクトがある…
最初にまとめ こんな内容の記事です。 ボタンかコマンドがたくさん並んだ一品もののテストアプリを、毎回一から作ってる? それなら、UI部分はNUnitConsoleに任せて、ロジックだけに集中しよう! その使い方を紹介 概要 DLLのようなロジックだけを開発する場合、テスト用にそれを色々なパラメータで呼び出すテストアプリを作ることが有ると思います。ボタンとコンボボックスとテキストボックスが大量に並んだテストアプリ、見たことがある人は多いんじゃないでしょうか。 こんな感じの画面 あるいはこんな感じでコマンドを打つツールです。 そうしたテストツールを書くのにも、単体テストコードでお馴染みのNUnit…
はじめに 解夏傀儡、お疲れさまでした!ゲーム自体はTwitterアカウントほど不気味じゃなくてよかった... nikkieです。 今週末はPyCon APAC 2023、現在トーク準備の真っ只中です。 今回は15分(英語で)テストが書けるようになるための知見を発表するのですが、話したいこと全部は15分には収まりきりません! そこで、extraコンテンツとしてエントリにします。 今回は(本編では一切触れない)unittestのおすすめリンク篇です1。 目次 はじめに 目次 ドキュメント unittest unittest.mock 書籍 『Python実践入門』🤗 『最短距離でゼロからしっかり学…
goal XUnitを使ったテストにおいて、MemberDataを使い、データドリブンテストを行ったとき、Testエクスプローラーで1件のテストとして認識されるのを何とかしたい。 つまり、データごとのテストとして認識されたい。 前提 テストデータとして、複雑なオブジェクトを想定する。 プリミティブ型の場合、標準の方法でやりたいことが実現できているので、そのケースは対象外とする。 テストデータの実装例は以下の通り。 public class TestData { public int IntProp { get; set; } public string StringProp { get; se…
東京の夏は、人類が生きていくには暑すぎる。 夏だけ北海道に住みたいと最近本気で思い始めています。こんにちは、DPEチームの嶺岸です。 alembicを触ることになった経緯 入社して右も左もわからないまま、なんでもやりますよ〜、とだけ言っていた私にある日こんなタスクをやってみないかとお話がありました。 「Github Actionsでユニットテストができるようにしたい」 はい!!よろこんで!!! なんでもやるけどなんでもできるとは言ってない、そんな私はもちろん当該のアプリケーションを触ったことがない。なんならこれまでPythonのフレームワークをひとつも触ったことがない。もっと言うとここ五年くら…
(English Below) Unit Testとは、ソフトウェア開発において、個々のコンポーネントが期待どおりに動作するかどうかを確認するためのテスト手法のことです。ChatGPTを使ってUnit Testを書くことで、自然言語処理のテストを簡単に行うことができます。 手順 以下は、ChatGPTを使用してUnit Testを書くための手順です。 必要なライブラリをインストールする テストする関数を作成する テストコードを書く テストを実行する 1. 必要なライブラリをインストールする まず、必要なライブラリをインストールする必要があります。PythonでUnit Testを書く場合、一般…
テスト駆動開発(TDD)は、開発者がテストコードを書き、そのコードが想定通りに動作することを確認しながら、プログラムの実装を進める手法です。PythonでもTDDを実践することができます。ここでは、PythonでのTDDの基本を解説し、テスト駆動開発によるメリットやポイントについても紹介します。 テスト駆動開発(TDD)の考え方 プログラムの品質向上 リファクタリングの促進 コードの可読性向上 unittestでのテストの書き方 TDDの実践 1. テストを最初に書く 2. テストを通す最小限のコードを書く 3. テストの失敗を意図的に起こす 4. コードのリファクタリング まとめ (adsb…
やりたいこと:Object型のデータに、任意のプロパティが存在するかをチェックしたい .toHaveProperty( Keypath, value? ) example: const user = { name: 'jane', age: '20', address: 'Los Angeles', } expect(user ).toHaveProperty('name'); => true 参考: jestjs.io
Pythonでいい感じに使えるタスクランナーがなかったので自作したのがkumade。 今回、いくつかの機能を追加実装してバージョンアップした。 追加実装した機能 kumadeはデータ分析、アルゴリズム開発の実務でも使ってたりするんだけど、実際に使ってるといくつかほしい機能が出てきた。 今回実装したのはそんな機能。 Pythonモジュールのインポート容易化(0.2.0以降) 設定値の実行時指定(0.2.0以降) タスクの並列実行(0.3.0以降) Pythonモジュールのインポート容易化 タスクはKumadefileに書いていくけど、ベタに全部書くとメンテナスが大変になる。 そこでコアな機能は別…
はじめに 今回はPesterというPowerShell用のテストフレームワークを紹介したいと思います。 $ Invoke-Pester -Output Detailed ./Sandbox.Test.ps1 Pester v5.6.1 Starting discovery in 1 files. Discovery found 3 tests in 2ms. Running tests. Running tests from '/---/Sandbox.Test.ps1' Describing Get-AddNum [+] 1 + 2 = 3 1ms (1ms|0ms) [+] -5 + 5 …
はじめに こんにちは。STORES 決済 でAndroidエンジニアをしている id:n-seki です。 最近は気温の乱高下が激しく、寒暖差で体がバグりそうですね。 さて、今日はUnitTest合宿の話をしようと思います。 UnitTest合宿とは......? はい、そうですよね。突然「合宿」と言われても戸惑うと思います。 私の提案を聞いたチームメンバーも同じ気持ちだったかもしれません。 私たち決済AndroidチームのメンバーはそれぞれがUnitTestについて課題感を持っていました。 UnitTestをあまり書いたことがないので、いざ書こうとすると何をテストすればよいか悩んでしまう U…
(社内エンジニアからの寄稿です) PG BATTLE とは products.sint.co.jp 3人1組で参加するプログラミングコンテストです。いわゆる競技プログラミングの形式で、出題された問題を時間内に解いて提出します。 プログラミングに対する評価向上 陽の当たる機会の提供 自分の実力を知る機会 単純に楽しむ の4つを柱として掲げており、プログラミングに自信のある方はもちろん、自信のない方も成長の機会に繋がるのではないかと思います。 これまでに6回開催されており、毎年400チーム近いエントリーがあります。弊社からはこれまで参加したことはありませんでしたが、上長にも背中を押され、初参加する…
約2週間ぶりのブログ更新です。 2024年はほぼ毎週欠かさずブログを書いていましたが、先週は家庭の事(家探し)でバタバタして書く時間を流石に捻出できずという状況でした。徐々に話が進みつつあるので、うまいこと決まると良いなと思っています。 前置きはさておき、今回は私がpatchで詰まった話です。 調べていると割と「あるある」のようでした。 最初に結論を載せておくと、以下のtell-kさんによるDjango Congress JP2018の発表資料のページに答えが書いてあります。 できる!Djangoでテスト 状況 Djangoのcall_commandをpatchしようとした しかし、周囲のコー…
clang-formatをカスタマイズするにあたりBasedOnStyleの内容がどうなっているか確認したくなったのでその方法と内容を紹介したいと思います。 BasedOnStyleの内容は以下のコマンドで各ベーススタイルの設定値が出力できます。 clang-format -style=llvm -dump-config 指定できる文字列は以下の通り。それぞれの組織が公開してるスタイルを利用できます(なぜかMicrosoftだけC++じゃなくて .NET(=C#)の規約になってるような感じです) LLVM - LLVMのC++コーディング規約 Google - GoogleのC++コーディング…
9/11~9/13 にかけて DroidKaigi 2024 が開催され、タイミーの Android アプリエンジニアチームが参加してきました。 はじめに 9月にジョインされた hunachi が登壇しています。Android の PDF Viewer に関する歴史や詳細な実装からライブラリの紹介まで PDF Viewer を網羅したセッションとなっているのでぜひアーカイブでご覧ください。 2024.droidkaigi.jp タイミーではブースも出しておりノベルティやタイミンの写真を撮りに来られる方など盛況でした。足を運んでいただいた皆様ありがとうございます! この DroidKaigi か…
ストックマークの技術広報をさせて頂いてる安藤 ( @ampersand_xyz )です。 2024/9/27~28の2日間にかけて、PyCon JP 2024(以下、PyCon)に弊社のスポンサーブースを出展させていただきました。 今回、ストックマークとしても自分個人としてもPyConへの参加ははじめてでした。 カンファレンスがどのような雰囲気や来場者層なのかが事前にイメージできておらず、ドキドキしながら挑ませていただきましたが、参加させていただいた結果としては非常にスポンサーをして良かったと感じています。 本記事ではブースにて行わせていただいた内容やイベントの様子、ブーススタッフとして参加し…
こんにちは、CX開発グループでWeb開発を担当している德廣です! 早速ですが弊社は創業から15年が経過し、その間にサービスが進化し続けてきました。それに伴い、システムも複雑化し、コードベースも肥大化してきました。 長い年月の中で追加され続けたコードの中には、現在のサービスに不要なものも少なくありません。 しかし、複雑な依存関係が増えるにつれ、不要なコードの削除が容易ではなくなっています。 今回の議論は、PHPやLaravelの最新化プロジェクトを振り返った際に、「不要なコードが見つかったが、削除するのが困難だった」という声が挙がりました。 そこで、チームで「なぜコードの削除が困難だったのか」「…
ISO 26262は、自動車業界での機能安全を確保するための国際規格です。特にソフトウェアの品質を保証するためには、Part 9(ソフトウェアのテスト)が非常に重要です。では、なぜテストがそんなに大事なのでしょうか?初心者の方にも理解しやすいよう、具体例やコードを交えながら解説していきます。 Part 9の概要 Part 9はソフトウェアの検証・テストに焦点を当てており、開発されたソフトウェアが期待通りに動作することを保証するために必要な一連のテストを規定しています。特に、自動車においてはソフトウェアのバグが人命に関わる可能性があるため、テストは非常に重要です。 主なテスト項目 単体テスト: …
ISO 26262 2nd Edition Part 8とは? ISO 26262のPart 8は、自動車機能安全の中で「サポートプロセス」を扱っている部分です。具体的には、構成管理、変更管理、バージョン管理、文書管理など、開発の中で安全を支えるさまざまなプロセスを指導するガイドラインとなっています。安全性を維持しながら、開発中のソフトウェアやハードウェアの変更をどう管理するかが焦点です。 車載システムの開発では、プロジェクト中に仕様変更やバグ修正が頻繁に発生します。そのため、Part 8で定義された変更管理や構成管理が非常に重要になります。間違った変更が加わると、車の動作に深刻な影響を与える…
ISO 26262 2nd Edition Part 7とは? ISO 26262は、車載システムの安全性を確保するための国際標準規格です。その中でも「Part 7」は、車載ソフトウェアの開発における具体的なガイドラインを提供する部分です。具体的には、ソフトウェアの単体テストや統合テスト、コードレビューなどに関するプロセスを定義しており、最終的には安全で信頼性の高いコードを作り上げることが目標です。 Part 7の役割と重要性 Part 7は、主に「ソフトウェアユニットの確認」と「ソフトウェアユニットの検証」にフォーカスしています。これは、車載ソフトウェアの各ユニットが正しく動作することを保証…
ISO 26262とは何か - 概要と実践的な視点 ISO 26262は、自動車の電気・電子システムにおける機能安全を規定する国際規格であり、自動車業界において非常に重要な役割を果たしています。この規格は、開発プロセスにおいて安全を確保するための一連のガイドラインを提供し、システムの設計、実装、テスト、検証にわたる各フェーズに適用されます。 ISO 26262は、事故や故障のリスクを軽減するために、特に「ASIL」(Automotive Safety Integrity Level)と呼ばれる安全レベルの概念を導入しています。このブログ記事では、ISO 26262の基本的な概念から、具体的なコ…