用鼻子进行单元测试:在编译时测试?

问题描述:

鼻子单元测试框架可以在模块的编译阶段执行测试吗?用鼻子进行单元测试:在编译时测试?

其实,我想用下面的结构来测试一些:

x = 123 
# [x is used here...] 
def test_x(): 
    assert (x == 123) 
del x # Deleted because I don't want to clutter the module with unnecessary attributes 

nosetests告诉我,x是不确定的,因为它test_x()导入模块后,显然运行。在编译阶段有没有一种方式让鼻子执行测试,同时让模块在使用它们之后释放不必要的资源?

+0

你担心垃圾回收不起作用吗? – 2009-05-21 11:05:14

+0

@ S.洛特:如果你没有在我的例子中使用“del x”,我不明白为什么x会通过垃圾回收被删除,因为它是它所在的模块的一个属性。因此,我相信垃圾收集,但是,除非我错了,否则在我的例子中就没有启动。没有? – EOL 2009-05-22 17:28:01

根据鼻子的主要开发人员Jason Pellerin的鼻子单元测试框架cannot run tests during compilation。如果模块“构造”和测试例程都需要访问某个变量(在没有测试的情况下将被删除),这是一个潜在的烦恼。

一种选择是通过预先“__”,以他们的名字从使用这些不必要的保存变量的劝阻用户(这个工程还为一流的施工中使用的变量:他们可以是这些“私人”的全局变量之一)。

另一个可能更简洁的选择是将模块专用于该任务:该模块将包含由模块“本身”(即没有测试)共享的变量及其测试(并且不需要共享)它不适用于测试)。

这些选项的问题是,如果没有测试,可以删除的变量保存在内存中,只是因为测试代码使用它们更好。至少,通过以上两种选择,用户不应该被动用这些变量,他也不应该觉得有必要想知道它们是什么!

一个简单的方法来处理这将有测试标志,并写上:

if not TESTING: 
    del x 

但是,你不会真的正确测试您的模块的测试会根据不同的情况来运行你的代码。

正确的答案是,你不应该真的在手动清理变量,而除非你真的有一些主要的性能问题,因为他们困扰。请阅读Premature Optimization,这是一个重要的概念。解决你有的问题,而不是你可能有一天会遇到的问题。