【问题标题】:How to get rackunit to display stack trace?如何让 rackunit 显示堆栈跟踪?
【发布时间】:2020-05-10 09:50:00
【问题描述】:

我在我的代码中使用这样的机架单元

(run-tests (test-suite "suite-name"
  (test-case "case name"
     ...
   ))

我正在尝试练习 TDD。当一个断言失败时,我可以看到哪个断言失败了。但是如果出现错误,不幸的是 rackunit 只会显示遇到的错误和失败的测试用例名称。

如果我正常执行代码,我会看到带有行号的堆栈跟踪。如何让 rackunit 显示这些信息?

【问题讨论】:

    标签: racket rackunit


    【解决方案1】:

    使用errortrace

    以下面的程序为例

    #lang racket/base
    
    (require rackunit
             rackunit/text-ui)
    
    (define suite
      (test-suite "suite-name"
        (test-case "case name"
          (check-equal? (1) 3))))
    
    (run-tests suite)
    

    产生:

    --------------------
    suite-name > case name
    ERROR
    
    application: not a procedure;
     expected a procedure that can be applied to arguments
      given: 1
      arguments...: [none]
    --------------------
    0 success(es) 0 failure(s) 1 error(s) 1 test(s) run
    1
    

    当您使用racket test.rkt 运行时。

    但是如果我们用racket -l errortrace -t test.rkt 运行它,那么它会产生:

    --------------------
    suite-name > case name
    application: not a procedure;
     expected a procedure that can be applied to arguments
      given: 1
      arguments...: [none]
      errortrace...:
       /Users/sorawee/racket/test.rkt:9:20: (1)
       /Applications/Racket v7.7/share/pkgs/rackunit-lib/rackunit/private/check.rkt:115:13: ((let-values (((...it/private/check.rkt:115:14) check-impl) ((temp3) (idY31 lifted/19 (....))) ((temp4) (quote (....)))) ((checked-procedure-check-and-extract struct:keyword-procedure ...it/private/check.rkt:115:14 keyword-procedure-extract (....) ....)...
       /Applications/Racket v7.7/share/pkgs/rackunit-lib/rackunit/private/test-case.rkt:58:2: (let-values (((...rivate/test-case.rkt:58:2) run-test-case5) ((temp1) (lambda () (void) (....))) ((temp2) (lifted/20 (quote ....)))) (if (variable-reference-constant? (#%variable-reference run-test-case5)) (run-test-case temp2 temp1) ((checked-procedure...
       /Users/sorawee/racket/test.rkt:11:0: (run-tests suite)
    
    application: not a procedure;
     expected a procedure that can be applied to arguments
      given: 1
      arguments...: [none]
    --------------------
    0 success(es) 0 failure(s) 1 error(s) 1 test(s) run
    1
    

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多