【问题标题】:Racket test-suite print test-case failure messagesRacket 测试套件打印测试用例失败消息
【发布时间】:2017-02-21 19:52:54
【问题描述】:

我有以下测试代码示例:

;; UNIT TESTS
(define (check-equal?-with-output a b failure-msg)
  (display "checking for equality:") (newline)
  (display a) (newline)
  (display b) (newline)
  (check-equal? a b failure-msg))

(define (run-test-newlines a-test-suite)
  (for-each
    (λ (elem)
      (display elem) (newline))
    (run-test a-test-suite)))

(define exercise-test
  (test-suite
    "exercise test"
    #:before (λ () (display "before") (newline))
    #:after (λ () (display "after") (newline))

    (test-case
      "test case for reverse using fold right"
      (check-equal?-with-output
        (reverse-fold-right (list 1 2 3))
        (list 3 2 1)
        "the procedure reverse-fold-right does not work correctly"))

    (test-case
      "test case for reverse using fold left"
      (check-equal?-with-output
        (reverse-fold-left (list 1 2 3))
        (list 3 2 1)
        "the procedure reverse-fold-left does not work correctly"))
  ))

(run-test-newlines exercise-test)

但是,当测试套件运行时,它只打印成功还是失败,而不是像 documentation for check-eq? 中显示的失败消息。我怎样才能让它在失败的情况下也打印该消息?

【问题讨论】:

    标签: unit-testing racket testcase test-suite


    【解决方案1】:

    如果您使用的是测试套件,默认情况下它们不会显示它们的问题。正如您所注意到的,它们只会输出失败,而不是为什么。

    如果你想要好的输出,你可以(require rackunit/text-ui)。 这将为您提供 (run-tests) 函数,该函数采用测试名称。

    示例代码:

    (define-test-suite logging-suite
      "Logging test suite"
      (test-case
        "Test we ignore bad input in the log"
        (check equal? (convert-xinput-log
                        '(
                          "bad data :O"
                          "key release 28"
                          "key release 26"
                          "key press 45646"
                          "key release 39"
                          "key release 28"))
                      '("t" "e" "r" "t"))))
    
    (run-tests logging-suite)
    

    这将给出如下输出:

    --------------------
    logging-suite > Test we ignore bad input in the log
    Test we ignore bad input in the log
    FAILURE
    name:       check
    location:   tests.rkt:30:4
    params:     #<procedure:equal?>
    '("t" "e" "s" "t")
    '("t" "e" "r" "t")
    Check failure
    --------------------
    0 success(es) 1 failure(s) 0 error(s) 1 test(s) run
    

    希望有帮助:)

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      相关资源
      最近更新 更多