正しく機能するタイミングに依存するオブジェクトがあります。残念なことに、タイミングの長さ自体が長すぎるため、リアルタイムで現実的にテストすることができず、時間が短くなると、オブジェクトの性質上、テストの目的を逸することになります。時間を伴うGolangテストプログラム
このようなオブジェクトをテストする最良の方法は何ですか?理想的には、任意の速さで使用可能な仮想クロックが使用できます。
type Obj struct{}
func (o Obj) TimeCriticalFunc(d time.Duration) bool {
//do stuff
//possibly calling multiple times time.Now() or other real time related functions
}
func TestTimeCriticalFunc(t *testing.T) {
if !Obj{}.TimeCriticalFunc(10 * 24 * time.Hour) {
t.Fail()
}
}
は、ウォール時間を表す明示的なパラメータを使用しない
そして、あなたのテストでください。テスト中は、このウォールタイムを早送りすることができます。 package net/http/cookiejarがどのように機能するかを見てみましょう。 – Volker
このアプローチでは、機能自体を変更する必要がありますが、これはやる気には消極的です。また、もし私がコードを持っていない関数を含むものをテストしようとしていたら、私は無力だろう。 –
これらのオブジェクトは常に時間を表す明示的なパラメータを持つべきかもしれない。最後にそれを行うかもしれませんが、私は最終的な手段としてそれを考慮しています –