我有一个用脚本语言编写的命令行应用程序。启动脚本执行以下操作:
import 'App'
app = new App()
app.run()
run()
方法负责实例化所有必需的对象,然后实际启动应用程序:
import 'Artist', 'Song', 'Listener'
class App
method run()
artist = new Artist()
song = new Song()
listener = new Listener(artist, song)
listener->listen()
end
end
我如何编写测试以确保run()
正在做他们应该做的事情?
我最初的想法是添加一个可选参数,以便我可以传递模拟Listener
并期望listen()
被调用,但它不会告诉我实际的Listener类是否会被实例化正确运行应用程序时。
另一个想法是将所有对象传递给run()
,但是我必须在启动脚本上创建它们,我也必须测试它并且出现同样的问题。
答案 0 :(得分:1)
我想说不要测试是否正确创建了对象。我假设你在自己的单元测试中测试Listener类的构造函数。鉴于我会说你可以信任解释器来正确构造你的对象。如果您想测试解释器是否可以构建类,那么您需要测试脚本语言而不是您的应用程序。
如果你想在功能上测试App类,那将意味着检查listen()
已经完成了它应该做的任何事情。你如何做到这将取决于listen()
应该做什么。
另一种选择是公开你需要测试的东西,当然有很多关于改变你的代码以使它更易测试的论据。我不会在这里进入他们。但是你可以在App中公开Listener类,这样你就可以在测试中查询它。
[稍微搁置一下:某些语言提供了向特定程序集公开属性的方法,这样您就不必公开公开属性(internalsvisibleto,我正在看着你#)。