我有一个调用(display "foo")
我想为它编写单元测试,以确认它在那里发送了正确的数据,但display
将其输入发送到标准输出:
(define (display x #!optional (port ##sys#standard-output))
(##sys#check-output-port port #t 'display)
(##sys#print x #f port) )
问题: 在其他语言中,我可能会将标准输出重新定义为只写入变量的内容,然后在测试后将其重新设置。鸡肉是正确的吗?如果是这样,怎么样?如果没有,那么正确的做法是什么?
注意:传递其他内容作为第二个参数显示不是一个选项,因为我必须改变单元测试的方法。
答案 0 :(得分: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")))
。