1

How to Design Programsの第2版の演習42ではcond、テストケースがすべての可能なケースを網羅しているわけではないため、DrRacketが以下のコードの最後の2つの句を強調していると説明しています。

; TrafficLight -> TrafficLight
; given state s, determine the next state of the traffic light

(check-expect (traffic-light-next "red") "green")

(define (traffic-light-next s)
  (cond
    [(string=? "red" s) "green"]
    [(string=? "green" s) "yellow"]
    [(string=? "yellow" s) "red"]))

私の理解ではelse、最後の句は残りのケースをカバーする必要があるので、最後の式を置き換えてみました:

(define (traffic-light-next s)
  (cond
    [(string=? "red" s) "green"]
    [(string=? "green" s) "yellow"]
    [(string=? "yellow" s) "red"]
    [else "green"]))

これはハイライトの問題を解決しません。ここで何が起こっているのですか?

4

1 に答える 1

5

ハイライトの目的を誤解しているのではないかと思います。コードカバレッジツールのポイントは、句がデータ定義のすべてのケースをカバーすることを保証するのではなく、作成したすべてのコードをカバーするのに十分なテストケース(つまり、 s)があることを確認することです。スニペットでは、ケースをテストしているだけです。データ定義の他の2つのケースにsを書き込むことで、ハイライトを取り除くことができます。check-expectcondcheck-expect"red"check-expect

elseまた、のデータ定義にTrafficLightは3つのケースしか含まれていないため、実際にはここにケースを記述したくないことにも注意してください。else署名/契約に違反せずにケースをテストすることはできません。

于 2012-09-03T13:56:00.090 に答える