2014-10-30 63 views
2

我有一个使用脚本语言编写的命令行应用程序。启动脚本确实是这样的:如何测试启动我的应用程序的方法?

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()被调用,但在运行应用程序时,它并没有告诉我,如果实际的监听器类将被正确实例。

另一个想法是将所有的对象传递给run(),但是我必须在启动脚本上创建它们,我也必须测试它,并且出现同样的问题。

+0

“确保run()正在做它应该做的事情“。首先描述它应该做什么? – Alderven 2014-10-30 14:15:20

+0

@ClickBerry究竟是什么在该代码中:实例化所需的对象并调用'listen()' – Schrute 2014-10-30 14:21:53

+0

@Schrute那么'listen()'应该做什么? – 2014-10-31 11:04:30

回答

1

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

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

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

[轻微旁白:一些语言提供公开属性,以特定的组件,让您不必公开公开属性(internalsvisibleto,我看着你C#)做的手段。]

相关问题