如何解决有什么方法可以对该方法进行单元测试?
我目前正在学习如何使用unittest模块。我以下面的类的形式将像板一样的扫雷器作为对象:
class Grid:
''' class to represent grid sizes. '''
def __init__(self,width: int,height: int,margin: int,rows: int,columns: int):
'''
width: int,in pixels
height: int,in pixels
margin: int,in pixels
row: number of squares along y axis
columns: number of square along x axis
'''
self.width = width
self.height = height
self.margin = margin
self.rows = rows
self.columns = columns
self.grid = [[0 for _ in range(self.columns)] for _ in range(self.rows)]
def gridDraw(self):
'''draws the grid for the game board'''
for row in range(self.rows):
for column in range(self.columns):
color = white.rgb()
if self.grid[row][column] == 1:
color = green.rgb()
pygame.draw.rect(screen,color,[(self.margin + self.width) * column + self.margin,(self.margin + self.height) * row + self.margin,self.width,self.height])
def size(self):
'''returns width,height,margin values '''
return(self.width,self.height,self.margin,self.rows,self.columns)
def gridVal(self):
'''returns grid value'''
return(self.grid)
我的问题是,如何在此gridDraw方法上进行单元测试?它实际上并不属于我通常如何使用assertEqual()函数等测试输出的范围。到目前为止,我的测试课程如下:
class GridTest(unit.TestCase):
def test_gridDraw(self):
def test_size(self):
def test_gridVal(self):
解决方法
对于test_size
和test_gridVal
,您可以简单地创建一个Grid对象并调用size()
或gridVal()
,然后如果其返回值符合预期,则调用assertEqual。
这是一个伪代码:
def test_size(self):
grid = Grid(...)
assertEqual(grid.size(),...)
def test_gridVal(self):
grid = Grid(...)
assertEqual(grid.gridVal(),...)
对于test_gridDraw
来说,要困难一点,您需要通过添加伪造的子类或对其进行模拟来覆盖pygame类。然后,您可以感知虚假或模拟对象,以查看其rect()
方法是否已使用预期的参数调用。
或者,您可以将gridDraw()
分解为getRects()
并使其调用者调用pygame.draw.rect
,以便可以将代码与pygame调用分开,并使代码易于测试。
这是原始代码的伪代码:
# Replace gridDraw with:
def getRects(self):
rects = []
for row in range(self.rows):
for column in range(self.columns):
...
rects.append(...)
return rects
gridDraw的调用者将改为执行此操作:
for rect in grad.getRects():
pygame.draw.rect(rect)
最后,getRects
的代码如下:
# Instead of test_gridDraw,we do:
def test_getRects(self):
grid = Grid(...)
assertEqual(grid.getRects(),...)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。