0

我有一个调用的程序(display "foo")

我想为它编写一个单元测试,以确认它在那里发送正确的数据,但display将其输入发送到标准输出:

(define (display x #!optional (port ##sys#standard-output))
  (##sys#check-output-port port #t 'display)
  (##sys#print x #f port) )

问题:在其他语言中,我可能会将标准输出重新定义为仅写入变量的内容,然后在测试后将其设置回来。在鸡肉中这样做是正确的吗?如果是这样,怎么做?如果不是,那么正确的做法是什么?

注意:传递其他内容以显示为第二个参数不是一个选项,因为我必须更改我正在单元测试的方法才能这样做。

4

1 回答 1

2

port是可选的第二个参数,默认为标准输出。

您可以执行以下两项操作之一将其发送到字符串。第一种方法是创建一个字符串端口并将其display作为可选参数传递给使用,而不是标准输出端口:

(use ports)
(call-with-output-string
  (lambda (my-string-port)
    (display "foo" my-string-port)))

第二种是将当前输出端口临时绑定到字符串端口:

(use ports)
(with-output-to-string
  (lambda () (display "foo")))

当您调用不接受端口参数的过程时,第二种方法最有用print,例如 。

您可以在有关字符串端口的手册部分中找到它。

于 2015-11-22T14:53:59.867 回答