- class Calculation:
- def __init__(self, A=0, B=1):
- factor = gcd( abs(A), abs(B) )
- if B < 0:
- factor = -factor
- self._numA = A // factor
- self._denoB = B // factor
-
-
- def __str__(self):
- return str(self._numA) + '/' + str(self._denoB)
-
- # now I have 2 different implementations for __int__"
- #either 1:
- def __int__(self):
- return int(float(self))
-
- # or 2 is used:
- def __int__(self):
- return self._numA/self._denoB
-
-
我的问题是,我如何编写单元测试(__name__='__main__')来测试这两种实现产生不同结果的情况?
# 回答1
先注释掉其中的一个,然后再注释掉另一个,因为您无论如何都只会有一个(第二个已定义).
# 回答2
我试图测试单独的实现,但两者都得出了相同的结果.有谁能举出两个实现会有两个不同结果的例子吗?
# 回答3
看起来他们退回的东西是一样的.
- def gcd(m,n):
- if n == 0: return m
- return gcd(n,m%n)
-
- class Calculation:
- def __init__(self, A=0, B=1):
- factor = gcd( abs(A), abs(B) )
- if B < 0:
- factor = -factor
- self._numA = A // factor
- self._denoB = B // factor
-
- def __str__(self):
- return str(self._numA) + '/' + str(self._denoB)
-
- def __float__(self):
- return float(self._numA)/self._denoB
-
- def __int__(self):
- return self._numA/self._denoB
-
-
- class Calc(Calculation):
- def __init__(self, A=0, B=1):
- Calculation.__init__(self, A, B)
-
- def __int__(self):
- return int(float(self))
-
- if __name__ == '__main__':
- test = (302, 22)
-
- a = Calculation(*test)
- print int(a)
-
- b = Calc(*test)
- print int(b)
-
- print float(a)
>13
13个
13.7272727273
>>>
# 回答4
以下是对一系列数字的测试:
- if __name__ == '__main__':
-
- testList = [(i,j) for i in xrange(9,109) for j in xrange(6,80)]
- strList = []
- for test in testList:
- a = Calculation(*test)
- b = Calc(*test)
- strList.append((int(a), int(b), float(a)))
- print '\n'.join(['%d %d %0.6f' % item for item in strList])
如果结果相同,则此测试不会打印任何内容:
- if __name__ == '__main__':
- testList = [(i,j) for i in xrange(9,2000) for j in xrange(6,80)]
- for test in testList:
- a = Calculation(*test)
- b = Calc(*test)
- if int(a) != int(b):
- print int(a), int(b)
# 回答5
如果其中一个数字为负数,则会有所不同:
- if __name__ == '__main__':
- testList = [(i,j) for i in xrange(-9,500,2) for j in xrange(-7,80,2)]
- for test in testList:
- a = Calculation(*test)
- b = Calc(*test)
- if int(a) != int(b):
- print test[0], test[1], int(a), int(b), str(a), str(b)
- ............
- -1 63 -1 0 -1/63 -1/63
- -1 65 -1 0 -1/65 -1/65
- -1 67 -1 0 -1/67 -1/67
- -1 69 -1 0 -1/69 -1/69
- -1 71 -1 0 -1/71 -1/71
- -1 73 -1 0 -1/73 -1/73
- -1 75 -1 0 -1/75 -1/75
- -1 77 -1 0 -1/77 -1/77
- -1 79 -1 0 -1/79 -1/79
- 1 -7 -1 0 -1/7 -1/7
- 1 -5 -1 0 -1/5 -1/5
- 1 -3 -1 0 -1/3 -1/3
- 3 -7 -1 0 -3/7 -3/7
- 3 -5 -1 0 -3/5 -3/5
- 5 -7 -1 0 -5/7 -5/7
- 5 -3 -2 -1 -5/3 -5/3
- 7 -5 -2 -1 -7/5 -7/5
- 7 -3 -3 -2 -7/3 -7/3
- .........................