听起来您正在寻找一个测试示例。我会通过说这是在 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()