Chinaunix首页 | 论坛 | 博客
  • 博客访问: 576857
  • 博文数量: 226
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 11:15
文章分类

全部博文(226)

文章存档

2011年(5)

2010年(64)

2009年(99)

2008年(37)

2007年(21)

我的朋友

分类: LINUX

2010-02-08 21:32:18

import unittest
import modelExample
import wx

class TestExample(unittest.TestCase): #1 声明一个TestCase

    def setUp(self): #2 为每个测试所做的配置
        self.app = wx.PySimpleApp()
        self.frame = modelExample.ModelExample(parent=None, id=-1)

    def tearDown(self): #3 测试之后的清除工作
        self.frame.Destroy()

    def testModel(self): #4 声明一个测试(Test)
        self.frame.OnBarney(None)
        self.assertEqual("Barney", self.frame.model.first,
                msg="First is wrong") #5 对于可能的失败的断定
        self.assertEqual("Rubble", self.frame.model.last)



def suite(): #6 创建一个TestSuite
    suite = unittest.makeSuite(TestExample, 'test')
    return suite

if __name__ == '__main__':
    unittest.main(defaultTest='suite') #7 开始测试

#1:声明unittest.TestCase的一个子类。为了最好的使每个测试相互独立,测试执行器为每个测试创建该类的一个实例。

#2: setUp()方法在每个测试被执行前被调用。这使得你能够保证每个对你的应用程序的测试都处在相同的状态下。这里我们创建了一个用于测试的框架(frame)的实例。

#3 :tearDown()方法在每个测试执行完后被调用。这使得你能够做一些清理工作,以确保从一个测试转到另一个测试时系统状态保持一致。通常这里包括重置全局数据,关闭数据库连接等诸如此类的东东。这里我们对框架调用了Destroy(),以强制性地使wxWidgets退出,并且为下一个测试保持系统处在一个良好的状态。

#4 :测试方法通常以test作为前缀,尽管这处于你的控制之下(看#6)。测试方法不要参数。我们这里的测试方法中,通过调用OnBarney事件处理器方法来开始测试行为。

#5 :这行使用assertEqual()方法来测试模型对象的改变是否正确。assertEqual()要两个参数,如果这两个参数不相等,则测试失败。所有的PyUnit断定方法都有一个可选的参数msg,如果断定失败则显示msg(msg的默认值几乎够表达意思了)

#6: 这个方法通过简单有效的机制创建一组测试。makeSuite()方法要求一个Python的类的对象和一个字符串前缀作为参数,并返回一组测试(包含该类中所有前缀为参数“前缀”的方法)。还有其它的机制,它们使得可以更明确设置测试组中的内容,但是makeSuite()方法通过足够了。我们这里写的suite()方法是一个样板模板,它可被用在你的所有测试模块中。

#7 :这行调用了PyUnit的基于文本的执行器。参数是一个方法的名字(该方法返回一测试组)。然后suite被执行,并且结果被输出到控制台。如果你想使用GUI测试执行器,那么这行调用应使用unittest.TextTestRunner的方法而非unittest.main

在控制台中PyUnit测试的结果如下:

.


Ran 1 test in 0.190s

OK

这是一个成功的测试。第一行的"."号表明测试成功。每个测试都得到一个字符并显示在这行。"."表明成功,"F"表明失败,"E"表明错误。然后是一个简单的列表,其中包含测试的数量、总的测试时间和OKOK表明所有测试通过。

对于一个失败或错误的测试,你将得到一堆跟踪提示(显示了Python得到的错误处的情况)。比如,如果你将#5改为{{{self.assertEqual("Fife", self.frame.model.first)}}},我们将得到如下结果:

F
======================================================================
FAIL: testModel (__main__.TestExample)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\wxPyBook\book\1\Blueprint\testExample.py", line 18, in testModel
self.assertEqual("Fife", self.frame.model.last)
File "c:\python23\lib\unittest.py", line 302, in failUnlessEqual
raise self.failureException, \
AssertionError: 'Fife' != 'Rubble'

----------------------------------------------------------------------
Ran 1 test in 0.070s

FAILED (failures=1)

"F"表明了失败,“testModel”是产生失败的方法名,下面的跟踪显示出18号上的断定失败,以及失败的原因。你一般需要根据这些去找到产生失败的实际位置。

阅读(602) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~