这听起来像你正在寻找一个测试的例子。我会告诉你,这是在Python 2.7中完成的,但我相信它也可以在3中工作(我所做的只是将print语句更改为一个函数 - 不知道其他函数是否工作:))。我对你的代码进行了一些编辑(正如cdarke提到的那样,有更简单的方法来设置点数,但我会保持接近你的原始代码,以便你可以看到你可以测试它的步骤)。这里是你的代码,有一些修改(注释):
def Books(num_books):
# We let books take a parameter so that we can test it with different
# input values.
try:
# Convert to int and then choose your response
num_books = int(num_books)
if num_books < 0:
response = "No Negatives"
elif num_books == 0:
response = "You earned 0 points"
elif num_books == 1:
response = "You earned 5 points"
elif num_books == 2:
response = "You earned 15 points"
elif num_books == 3:
response = "You earned 30 points"
elif num_books == 4:
response = "You earned 60 points"
else:
response = "That's a lot of books"
except ValueError:
# This could be handled in a better way, but this lets you handle
# the case when a user enters a non-number (and lets you test the
# exception)
raise ValueError("Please enter a number.")
return response
def main():
# Here we wrap the main code in the main function to prevent it from
# executing when it is imported (which is what happens in the test case)
# Get the input from the user here - this way you can bypass entering a
# number in your tests.
a = input("Enter number of books: ")
# Print the result
print(Books(a))
if __name__ == '__main__':
main()
然后测试,你可以简单地运行作为python my_program_test.py
:
import my_program
import unittest
class MyProgramTest(unittest.TestCase):
def testBooks(self):
# The results you know you want
correct_results = {
0: "You earned 0 points",
1: "You earned 5 points",
2: "You earned 15 points",
3: "You earned 30 points",
4: "You earned 60 points",
5: "That's a lot of books"
}
# Now iterate through the dict, verifying that you get what you expect
for num, value in correct_results.iteritems():
self.assertEqual(my_program.Books(num), value)
def testNegatives(self):
# Test a negative number to ensure you get the right response
num = -3
self.assertEqual(my_program.Books(num), "No Negatives")
def testNumbersOnly(self):
# This is kind of forced in there, but this tests to make sure that
# the proper exception is raised when a non-number is entered
non_number = "Not a number"
self.assertRaises(ValueError, my_program.Books, non_number)
if __name__ == '__main__':
unittest.main()
你为什么要在函数中的参数'books' – avasal
错误!编辑我的问题。 –