테스트 예를 찾고있는 것처럼 들립니다. 파이썬 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
실수! 내 질문을 수정했습니다. –