如何测试启动我的应用程序的方法?

时间:2014-10-30 14:04:11

标签: unit-testing testing

我有一个用脚本语言编写的命令行应用程序。启动脚本执行以下操作:

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(),但是我必须在启动脚本上创建它们,我也必须测试它并且出现同样的问题。

1 个答案:

答案 0 :(得分:1)

我想说不要测试是否正确创建了对象。我假设你在自己的单元测试中测试Listener类的构造函数。鉴于我会说你可以信任解释器来正确构造你的对象。如果您想测试解释器是否可以构建类,那么您需要测试脚本语言而不是您的应用程序。

如果你想在功能上测试App类,那将意味着检查listen()已经完成了它应该做的任何事情。你如何做到这将取决于listen()应该做什么。

另一种选择是公开你需要测试的东西,当然有很多关于改变你的代码以使它更易测试的论据。我不会在这里进入他们。但是你可以在App中公开Listener类,这样你就可以在测试中查询它。

[稍微搁置一下:某些语言提供了向特定程序集公开属性的方法,这样您就不必公开公开属性(internalsvisibleto,我正在看着你#)。