質とスピード(2020春版) 2020/02/13 @ デブサミ2020
The longer I spend as a software engineer, the more obsessive I get about testing. I fully subscribe to the definition of legacy code as “code without an automated test suite.” I’m convinced that the best thing you can do to encourage fast progress in a test suite is to design for testing and have a fast, reliable, comprehensive test suite. But for all that, I’ve never really subscribed to any of
JAWS Festa 東海道 2016
package main import ( "net/http" "github.com/facebookgo/grace/gracehttp" "github.com/sebest/xff" "goji.io" "goji.io/pat" "golang.org/x/net/context" ) func main() { mux := goji.NewMux() mux.HandleC(pat.New("/*"), NewMux()) err := gracehttp.Serve(&http.Server{Addr: ":8080", Handler: mux}) if err != nil { panic(err) } } func NewMux() *goji.Mux { mux := goji.NewMux() mux.Use(xff.Handler) mux.HandleFun
golangでIOへのテストを行う | おおたの物置 まとめ fmt.Print等にちゃんと出力されるかテストしたい 結論としては直接は無理 io.Writerを利用するように変えることで簡単にテスト可能 渡されたio.Writerに書き込むようにする ... http://ota42y.com/blog/2015/04/01/go-io-test/ golang には Example Test という機能があり、テスト関数名に Example のプレフィックスを付ける事で実行結果として出力される標準出力のテストを行う事が出来ます。 期待する結果はこの関数の中にコメントとして書くことが出来ます。 go-pipeline/example_test.go at master - mattn/go-pipeline-· GitHub https://github.com/mattn/go-pip
本番環境で動いているFluentdのin_forwardに何が流れているのかを知りたい、けど設定を触りたくない…みたいな場合に流れているタグやレコードを見る方法です。特にFluentdに限った話ではないですが、備忘録として書いておきます。 1. tcpdumpでキャプチャ 調べたいサーバ上で、tcpdumpを使ってパケットキャプチャを取ります。in_forwardのポート番号などを指定してキャプチャします。 $ sudo tcpdump -i eth0 -w fluentd.pcap port 24224 and tcp 2. tcptraceでTCPストリームのデータだけ吐き出す tcptraceは-eオプションを渡すと、TCPストリームごとのデータをファイルに吐いてくれるのでこれを利用します。なお、tcptraceはHomebrewやaptで入ると思います。 $ tcptrace -e
はじめに 先日開催された『開発を活性化するためのポイントとテストに関する勉強会』にて、『組織にテストを書く文化を根付かせる戦略と戦術』のお話を聞いてきたので、そこでの内容と自分が所属している組織への適用について記してみます。 各種資料 発表資料 組織にテストを書く文化を根付かせる戦略と戦術 from Takuto Wada Togetter togetter.com 感想 衝撃的だったのは、「テストを書く文化の醸成には2年ぐらいかかる」という言葉。 t_wada「文化の醸成は年単位の事業になる。だいたい2年ぐらいかかる。」 #jopf— みよひで。オシャレ男子になりたい (@miyohide) 2016, 2月 16 一日二日でできるとは思っていないんですが、まさか年単位とは。 そのため、勢いで乗りきれるほど甘くはなく、戦略と戦術でもってテストを書く文化を醸成しましょうという話に続きます。
Quickでテストを書くと、SwiftとObjective-Cで書かれたプログラムがどう動作しているか楽に確認できます。 ところが、有用なテストはQuickを使わなくても書けます。 役に立つテストが書けるようになるには、Quickのようなフレームワークの使い方を覚える必要はありません。 このディレクトリにあるファイルは、QuickかXCTestかを問わず、 「役に立つ」テストとは何か、そしてどうやってそういったテストが書けるか、 それを拙文ながら説明しようとしています。 目次: (テストについて事前知識がまったくない方は、順に読んでいくことをオススメします。) Xcodeでテストを用意しましょう: アプリのコードがテスト・ファイルから参照できない場合や、 その他スムーズにテストが動かない場合はこのファイルを読み返すといいかもしれません。 XCTestで役に立つテストを書く方法:Arrang
http://github.com/ToQoz/gopwt goのpower assert用パッケージ、だいたいできた https://t.co/pzRuhoHVC5— ピヨちゃんです (@ToQoz) July 14, 2014 この時は、「Assert内で副作用のある関数を呼んでいるとそれがコケた場合に、出力の時に再度呼ばれて実際の値と違うものが表示されたり、それ以降のテストに影響がある」みたいな問題があった。それを解決するには適当に関数の呼び出しをキャッシュしてやる必要があって、型のチェックが実行時にしかない言語なら、a() == b() とかってのを memorized(a) == memorized(b) とかってできると思うけど、わりかし大変だった。 reflect.ValueOf(f).Call(reflect.ValueOf(arg1), reflect.ValueOf(a
(追記: このハックはライブラリとして独立させました gfx/RobolectricInstrumentation · GitHub) Robolectricは便利ですが、Oracle JREとAndroid Runtimeの微妙な挙動の違い、特にAndroid Runtimeにバグの回避するようなコードのテストができないという問題があります。 ところでRobolectricを純粋にJVM用のAndroid Frameworkランタイムとみなすと、テストクラスをほとんどAndroid Instrumentation Testsと同じように書くことができます。 Robolectricのほうがテストの実行が速いので、開発中はRobolectricを使うほうが効率はいいのですが、微妙に挙動に違いがあるので実機でもテストは走らせたいところです。そこで同じテストクラスをAndroid Instrum
Serverspec の Docker Backend を使った Docker コンテナのテストを CircleCI 上で実行する際、多少手こずったので、その試行錯誤によってできた、サンプルプロジェクトを公開しました。 GitHub Repository quay.io Registry CircleCI Builds 前回の記事で紹介した事例は Rails を採用していたので、コンテナ側にも Ruby がインストールされており、コンテナ側にマウントするだけで Serverspec を実行できました。 docker run \ -e DATABASE_URL="${DATABASE_URL}" \ -e REDIS_URL="${REDIS_URL}" \ -v "$(pwd)/docker/serverspec"\:/mnt/serverspec \ --name "serverspec
JavaでのテストはJUnit4が使われていると思いますが、自分としては、それに加えてAssertJをオススメします。 AssertJ AssertJが使いやすい理由 JUnit4のassertThatと比べてAssertJが使いやすい理由は2つあります。 流れるようなインターフェース AssertJは「Fluent assertions for java」とトップページに大きく書かれているように、流れるようなインターフェースが最大の特徴です。いちいちドキュメントを調べなくても、IDEの補完機能で適切なメソッドを調べられるので、JUnit4のassertThatに比べて書きやすいです。 拡張がMatcherに比べて遥かに楽 Matcherの拡張対象は「比較方法」で、AssertJの拡張対象は「クラス」なので比較するのは適切ではないかもしれませんが、Matcherの拡張が靴の上から足を掻く感
Perl 書いてりゃ Test::More でテスト書きまくると思うのですが、Test::More っていうか、まあ別に Test::More だけがそうというわけでもないのですが、テストこけたときのケアが十分じゃないなと思うときがけっこうあります。 開発過程で書いてるコードというのは、いつもいつも確信を持って書いているわけではないわけで、それでなくてもうっかり間違うときもあり、せっかくテスト書いているのに何だかよくわからない理由でこけてパスできなくて時間を浪費してしまったりが日常になってたりしませんか? そういうのを繰り返しているとやがてテスト嫌いになりテスト書かなくなって本番コードにデバッグコードが入り乱れ、リファクタもどんどん不可能になって小回り効かないままプロジェクトが失敗して彼女に振られてしまうわけですね。困ります。 note diag explain Test::More には
JUnit4.12がでました!……2014/12/4に。なんと6ヶ月経ってる。まぁいいや。 JUnit 4.12の新機能紹介まとめ / うさぎ組(2014/8/5) JUnit 4.12から入ったTestRuleを軽く見てみる / 裏紙(2015/2/28) JUnit4.12時代のParameterized Test / mike-neckのブログ(2015/5/6) ググっても4.12の情報があまり引っかからなかったので書いてみますね。 リリースノート斜め読み とりま、Summary of changes in version 4.12 を斜め読み致して、気になるところ(★)は後でもう少し詳しく書く事にします。なお、バグフィックス、メッセージ変更、挙動の統合などの特にテストコーディングに影響を与えないものはスルー。 Assersions floatのassertNotEquals →
こんにちは。技術部の松尾(@Kazu_cocoa)です。 安定したリリースを継続して回す為には、開発プロセスや実装も大事ですが、その中でどのような確認、テストを継続して行うかも大切になります。そこで、開発プロセスにおけるテストをどのように切り分けて、構築していくかという考え方に関して少し整理してみようと思います。 これにより、実施されているテストによって検出できる/できない不具合がどのようなものか、それが開発中のどこで防ぐことができるのかを整理できるようになってくると思います。また、安定したリリースを実現するためのボトルネック解消に向けて、どのレベルでテストを充実させると効率的にそれが達成できるかという所も考えることができるようになります。 テストレベルによるテストの区分け テストレベルという言葉にも様々な定義がありますが、ここではざっくりとテスト対象となる範囲や領域を意味することにします
golangのtestingパッケージはシンプル主義のgoならではといった、最小限の機能のみを提供しています。実際のところこれまでも(ほぼ)充分な機能を提供してきたわけですが、テスト前の初期化を明確に定義できないなど、不満もありました。 そういうわけで、1.4からこの不満を解決するtesting.MとTestMain(*testing.M)が追加されています。これがかなり最高便利です。 従来のテクニック 当然、これまでもテストの"初期化"や"お片づけ"を書きたいという要求は当然ありました。それに対しては、go testコマンドがファイルをabc...順に読みこむことを利用して、ファイル名を工夫するというちょっと裏ワザ的な手法が一般的でした。 すなわち、最初に実行したいテストが書かれたファイルは「a_test.go」にして、最後に実行したいテストを「z_test.go」とするわけです。この方
こんにちは、せーのです。今日はプログラマーなら重宝するであろうツールをご紹介致します。名前を「fake2db」といいます。 どんなもの? こちらは名前のとおり「fake」なデータをDBに入れるツールとなります。本番稼働前の開発時はもちろん、本番稼働後も不具合のチェック等で確認したいが本番データは契約上使えない、というような場合にサッとダミーデータが作れるととても便利ですね。 概要 ではfake2dbの概要です。fake2dbはPython製でpipにてインストール致します。ダミーデータを作れるDBはsqlite, mysql, postgresql, mongodb, redisと大体のメジャーなDBは押さえているような感じです。 やってみる では早速やってみましょう。mysqlとpostgresqlで試してみます。AWSのRDSを使ってそれぞれのDBを立て、ツールインストール用にEC2を
はじめに みなさんこんにちは! この記事は「必要最小限の努力で最大限実戦で使える知識を提供するRSpec入門記事」、略して「使えるRSpec入門」の第4回です。 今回はCapybaraを使ったフィーチャスペックについて説明します。 ただし、今までの記事とは異なり、フィーチャスペックのイロハよりも「Capybaraの使い方」に重点を置きます。 なぜなら、僕個人の経験からいって、フィーチャスペックで困るのは「このブラウザの操作って、どうやってコードで表現するの??」というケースが大半だからです。 それ以外は第1回~第3回の内容をそのまま応用できるので、特に「フィーチャスペックだから困る」ということはないと思います。 今回は説明する主な項目は以下の通りです。 フィーチャスペックの基本 ページの移動や画面のクリック、フォームの操作など 画面やフォームの検証 画面の操作や検証の応用テクニック その他
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く