183
社区成员
发帖
与我相关
我的任务
分享| The Link Your Class | https://bbs.csdn.net/forums/MUEE308FZ |
|---|---|
| The Link of Requirement of This Assignment | https://bbs.csdn.net/topics/603748107 |
| The Aim of This Assignment | Unittest for python |
| MU STU ID and FZU STU ID | 19104723_831901330 Haoyu Wang |
The purpose of this article is to familiarize you with Junit tests or UNITTests and the use of these tools. For example, 'Assert, suite, timeout', check the details of the problem. I use a toolkit called UnitTest to select Python, which is already in Python.
import unittest,random
# Test Class
class MyClass(object):
@classmethod
def sum(self, a, b):
return a + b
@classmethod
def div(self, a, b):
return a / b
@classmethod
def retrun_None(self):
return None
# Unit Test Class
class MyTest (unittest.TestCase):
# assertEqual()
def test_assertEqual(self):
# test if a+b equals sum or not
try:
a, b = 1, 2
sum = 3
self.assertEqual(a + b, sum, 'assert failed!,%s + %s != %s' %(a, b, sum))
except AssertionError as e:
print (e)
# assertNotEqual()
def test_assertNotEqual(self):
# test if b-a equals res or not
try:
a, b = 4, 2
res = 2
self.assertEqual(b - a, res, 'assert failed!,%s - %s != %s' %(a, b, res))
except AssertionError as e:
print (e)
# assertTrue()
def test_assertTrue(self):
try:
self.assertTrue(1 == 1, "False expression")
except AssertionError as e:
print (e)
# assertFalse()
def test_assertFalse(self):
# fix missing codes below ‘try’, only a line of codes needed
try:
self.assertFalse(1 != 1, "False expression")
except AssertionError as e:
print (e)
# assertIs()
def test_assertIs(self):
# test a and b are totally same
try:
a = 12
b = a
self.assertIs(a, b, "%s and %s are not same" %(a, b))
except AssertionError as e:
print (e)
# assertIsInstance()
def test_assertIsInstance(self):
# fix missing codes below ‘y=object’ to test type(x) != y, only a line of codes needed
try:
x = MyClass
y = object
self.assertIsInstance(y, x, "False expression")
except AssertionError as e:
print (e)
if __name__ == '__main__':
# run unittest
unittest.main()
import unittest
import random
from Calc import Calc
class TestCalcFunctions(unittest.TestCase):
def setUp(self):
self.c = Calc()
print("setup completed!")
def test_sum(self):
self.assertTrue(self.c.add(1, 2, 3, 4) == 10)
def test_sub(self):
self.assertTrue(self.c.sub(9, 5) == 4)
# fix a line of codes to test c.sub(self, a, *b) method
def test_mul(self):
self.assertTrue(self.c.mul(2, 4) == 8)
# fix a line of codes to test c.mul(self, *b) method
def test_div(self):
self.assertTrue(self.c.div(4, 2) == 2)
# fix a line of codes to test c.div(self, a, *b) method
def tearDown(self):
print("test completed!")
def tearDown(self):
print("tearDown completed")
if __name__ == '__main__':
unittest.main()
import random
import unittest
from TestCalc import TestCalcFunctions
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = list(range(10))
def tearDown(self):
pass
def test_choice(self):
# chose an element from seq randomly
element = random.choice(self.seq)
# check element is truly in the sequence
self.assertTrue(element in self.seq)
def test_sample(self):
# if codes raise exception
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
class TestDictValueFormatFunctions(unittest.TestCase):
def setUp(self):
self.seq = list(range(10))
def tearDown(self):
pass
def test_shuffle(self):
# shuffle sequence
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, list(range(10)))
# check TypeError exception
self.assertRaises(TypeError, random.shuffle, (1, 2, 3))
if __name__ == '__main__':
# get all test methods start with ‘test’ and return a suite
suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
# please fix another two suite, suite2 of TestCalcFunctions and suite3 of TestDictValueFormatFunctions
suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCalcFunctions)
suite3 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)
# put more test class into suite
# you can change suites’ order, like [suite1, suite2, suite3]
suite = unittest.TestSuite([suite2, suite1,suite3])
# set verbosity = 2 you could get more detailed information
unittest.TextTestRunner(verbosity = 2).run(suite)
#encoding=utf-8
import random,sys,unittest
class TestSeqFunctions(unittest.TestCase):
a = 1
def setUp(self):
self.seq = list(range(20))
@unittest.skip("skipping") # skip this method anyway
def test_shuffle(self):
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq,list(range(20)))
self.assertRaises(TypeError,random.shuffle,(1,2,3))
@unittest.skipIf(a > 5, "skipping") # skip this method anyway
def test_choice(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
@unittest.skipUnless(sys.platform.startswith("linux"))# add a line of annotation that skip if not in linux platform
def test_sample(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
if __name__=="__main__":
# unittest.main()
suite = unittest.TestLoader().loadTestsFromTestCase(TestSeqFunctions)
suite = unittest.TestSuite(suite)
unittest.TextTestRunner(verbosity = 2).run(suite)
# encoding=utf-8
import unittest
from Calc import Calc
class MyTest(unittest.TestCase):
@classmethod
def setUpClass(self):
print("init Calc before unittest")
self.c = Calc()
# rename the four methods bellow, make sure print queue will be :
# P.S.: test case must starts with ‘test’
def test_add(self):
print("run add()")
self.assertEqual(self.c.add(1, 2, 3), 7, 'test add fail')
def test_sub(self):
print("run sub()")
self.assertEqual(self.c.sub(2, 1, 2), -1, 'test sub fail')
def test_mul(self):
print("run mul()")
self.assertEqual(Calc.mul(1, 2, 3, 4), 24, 'test mul fail')
def test_div(self):
print("run div()")
self.assertEqual(Calc.div(1, 8, 2, 4), 1, 'test div fail')
if __name__ == '__main__':
unittest.main()
import time, unittest, sys, time
import timeout_decorator
class timeoutTest(unittest.TestCase):
# set a time decorator(annotation) which will be triggered after 5s’ running
@timeout_decorator.timeout(5)
def testtimeout(self):
print("Start")
for i in range(1, 10):
time.sleep(1)
print("%d seconds have passed" % i)
if __name__ == "__main__":
unittest.main()