Upgrade to Pro — share decks privately, control downloads, hide ads and more …

testing/synctest使ってみた

Avatar for Pana Pana
March 07, 2025
46

 testing/synctest使ってみた

Avatar for Pana

Pana

March 07, 2025
Tweet

Transcript

  1. synctest.WaitのGoDocをみてみる(⼀部翻訳) 1. Waitは、現在のbubble内の現在のゴルーチン以外のすべてのゴルーチンが 持続的にブロック (durably block) されるまでブロックする 2. bubble外のゴルーチンから呼び出された場合や、同じbubble内の2つのゴ ルーチンが同時にWaitを呼び出した場合はパニックする

    3. bubble内の他のゴルーチンによってのみブロックを解除できる場合、その ゴルーチンはdurably blockされる 4. time.Sleepやbubble内からのチャネルの送受信などはゴルーチンを durably blockする 「ゴルーチンの終了を待つ」とは書かれていない! 1, 4を元にもう⼀度考えてみる!
  2. synctest.Waitの挙動 1. Waitが呼ばれた時、サブのゴルーチ ンは実⾏中なら2、終了したなら4へ 2. サブのゴルーチンがdurably blockedになるまで待つ 3. durably blockedになることなく、

    サブのゴルーチンが終了 4. Waitはサブのゴルーチンを気にする 必要がなくなってunblock 5. メインのゴルーチンの処理が進む (Runの仕様その5) bubbleの中のすべてのゴルーチンがブロックされたら時間が進む
  3. おさらい! Q1. テストでSetだけ呼んだ時、下記で出⼒される時刻はどうなるか? 正解はC A. テストを実⾏した時の時刻 B. 2000-01-01 00:00:00 (UTC)

    C. 2000-01-01 00:00:05 (UTC) (Runの仕様その3) Runはbubbleの中のすべてのゴルーチンがexitするまで待つ → サブのゴルーチンのtime.Sleepを待つ
  4. おさらい! Q2. メインのゴルーチンのtime.Sleepを外すとどうなるか? 正解はA A. テストが落ちる B. flakyなテストになる C. テストは落ちない

    (Waitの仕様その1) Waitは、現在のbubble内の現在のゴルーチン以外のすべてのゴルー チンが持続的にブロック (durably block) されるまでブロックする → サブのゴルーチンがブロックされたら、メインのゴルーチンの処 理が進む