Practical Programming
An Introduction to Computer Science
Using Python 3
(Pragmatic Programmers)
(Pragmatic Bookshelf)
Paul Gries (著) Jennifer Campbell (著)
Jason Montojo (著) Lynn Beighley (編集)
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python 3.4 (プログラミング言語)
Practical Programming: An Introduction to Computer Science Using Python 3 (Pragmatic Programmers) (Paul Gries (著)、Jennifer Campbell (著)、Jason Montojo (著)、Lynn Beighley (編集)、Pragmatic Bookshelf)のChapter 15(Testing and Debugging)、15.7(Exercises) 6-a, b.を解いてみる。
15.7(Exercises) 6-a, b.
コード(BBEdit)
test_average.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import unittest
import sample6
import sample6_fixed
class TestAverage(unittest.TestCase):
def test_empty(self):
values = []
expected = None
actual = sample6.average(values)
self.assertEqual(expected, actual)
def test_one(self):
values = [10]
expected = 10
actual = sample6.average(values)
self.assertEqual(expected, actual)
def test_two(self):
values = [10, 20]
expected = 15
actual = sample6.average(values)
self.assertEqual(expected, actual)
def test_include_none(self):
values = [None, 10, 20]
expected = 15
actual = sample6.average(values)
self.assertEqual(expected, actual)
class TestAverageFixed(unittest.TestCase):
def test_empty(self):
values = []
expected = None
actual = sample6_fixed.average(values)
self.assertEqual(expected, actual)
def test_one(self):
values = [10]
expected = 10
actual = sample6_fixed.average(values)
self.assertEqual(expected, actual)
def test_two(self):
values = [10, 20]
expected = 15
actual = sample6_fixed.average(values)
self.assertEqual(expected, actual)
def test_include_none(self):
values = [None, 10, 20]
expected = 15
actual = sample6_fixed.average(values)
self.assertEqual(expected, actual)
unittest.main()
sample6_fixed.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def average(values):
""" (list of number) -> number
Return the average of the numbers in values. Some items in values are
None, and they are not counted toward the average.
>>> average([20, 30])
25.0
>>> average([None, 20, 30])
25.0
"""
count = 0 # The number of values seen so far.
total = 0 # The sum of the values seen so far.
for value in values:
if not value is None:
total += value
count += 1
if count == 0:
return None
return total / count
入出力結果(Terminal, IPython)
$ ./test_average.py EF...... ====================================================================== ERROR: test_empty (__main__.TestAverage) ---------------------------------------------------------------------- Traceback (most recent call last): File "./test_average.py", line 12, in test_empty actual = sample6.average(values) File "/Users/kamimura/Documents/py/prac_prog/ch15/sample6.py", line 19, in average return total / count ZeroDivisionError: division by zero ====================================================================== FAIL: test_include_none (__main__.TestAverage) ---------------------------------------------------------------------- Traceback (most recent call last): File "./test_average.py", line 28, in test_include_none self.assertEqual(expected, actual) AssertionError: 15 != 10.0 ---------------------------------------------------------------------- Ran 8 tests in 0.004s FAILED (failures=1, errors=1) $
0 コメント:
コメントを投稿