don't stop believing

unittest assert 함수 살펴보기 본문

Python/unittest

unittest assert 함수 살펴보기

Tongchun 2018. 3. 27. 11:44

unittest에 있는 assert 함수들을 살펴보겠습니다.

확인을 위해 아래와 같이 준비합니다. 먼저 mymath.py 파일을 만들고 아래 내용을 저장합니다.

# -*- coding: utf-8 -*-

# 변수 a와 b를 합합니다.
# a, b 변수가 숫자(integer)일 경우 더하기가 됩니다.
# a, b 변수가 문자(string)일 경우 두 문자가 합처진 하나의 문장이 됩니다.
# a, b 변수가 서로 타입이 다를 경우 에러가 발생합니다.
def add(a, b):
	return a + b

# 변수 a와 b를 뺍니다.
def subtract(a, b):
	return a - b

# 변수 a와 b를 곱합니다.
def multiply(a, b):
	return a * b

# 변수 numerator(분자)와 denominator(분모)를 나눕니다.
def divide(numerator, denominator):
	return float(numerator) / denominator

# 변수 a와 b를 비교합니다.
# 비교해서 같다면 True, 다르다면 False를 반환합니다.
def compare(a, b):
	if a == b:
		return True
	else:
		return False

# 변수 a에 b를 거듭제곱합니다.
def involution(a, b):
	return a**b

이제 mymath.py와 같은 위치에 unittest-sample.py 파일을 만듭니다.

unittest-sample.py 파일에 아래와 같이 추가하고 저장합니다.

# -*- coding: utf-8 -*-
import mymath
import unittest

class TestNGLE(unittest.TestCase):

	def test_add_integers(self):
		result = mymath.add(1, 2)

		# 결과 값이 3일 경우 Pass 입니다.
		# result == 3
		self.assertEqual(result, 3)

		# 결과 값이 5이 아닐 경우 Pass 입니다.
		# result != 5
		self.assertNotEqual(result, 5)

	def test_add_strings(self):
		result = mymath.add('My life suddenly took ', 'a turn for the better.')

		# 문자를 연결합니다.
		# 전체 문장에 'turn for'라는 글자가 있다면 Pass 입니다.
		# My life suddenly took a turn for the better.
		self.assertIn('turn for', result)

		# 전체 문장에 'tongchun'이라는 글자가 없다면 Pass 입니다.
		# My life suddenly took a turn for the better.
		self.assertNotIn('tongchun', result)

	def test_compare_integers(self):
		retult = mymath.compare(10, 10)

		# result의 값이 True라면 Pass 입니다.
		self.assertTrue(retult)

	def test_compare_strings(self):
		retult = mymath.compare('ngle', 'tongchun')

		# result의 값이 False라면 Pass 입니다.
		self.assertFalse(retult)

	def test_multiply(self):
		result = mymath.multiply(10, 2)

		# result의 값이 기대한 값(10)보다 크다면 Pass 입니다.
		# result > 10
		self.assertGreater(result, 10)

	def test_subtract(self):
		result = mymath.subtract(5, 5)

		# result의 값이 기대한 값(-3)보타 크거나 같다면 Pass 입니다.
		# result >= -3
		self.assertGreaterEqual(result, -3)

	def test_divide(self):
		result = mymath.divide(3, 9)

		# result의 값이 기대한 값(6)보다 작다면 Pass 입니다.
		# result < 6
		self.assertLess(result, 6)

	def test_involution(self):
		result = mymath.involution(3, 3)

		# result의 값이 기대한 값(81)보다 작거나 같다면 Pass 입니다.
		# result <= 81
		self.assertLessEqual(result, 81)


if __name__ == '__main__':
	unittest.main()

그런다음 cmd에서 python으로 unittest-sample.py를 실행해 봅니다.

D:\Test-Unittest>python unittest-sample.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

OK를 보셨다면 이제부터 assert 함수를 설명하겠습니다.


assertEqual()

assertEqual(결과 값, 기대한 값)

실제 데이터 값과 기대한 값이 동일한지 확인합니다.

결과 값과 기대한 값이 같다면 (결과 값 == 기대한 값) Pass 입니다.

# 결과 값이 3일 경우 Pass 입니다.
# result == 3
self.assertEqual(result, 3)


assertNotEqual()

assertNotEqual(결과 값, 기대한 값)

실제 데이터 값과 기대한 값이 다른지 확인합니다.

결과 값과 기대한 값이 다르다면 (결과 값 != 기대한 값) Pass 입니다.

# 결과 값이 5이 아닐 경우 Pass 입니다.
# result != 5
self.assertNotEqual(result, 5)


assertTrue()

assertTrue(결과 값)

결과 값이 True인지 확인합니다.

결과 값이 True라면 Pass 입니다.

# result의 값이 True라면 Pass 입니다.
self.assertTrue(retult)


assertFalse()

assertFalse(결과 값)

결과 값이 False인지 확인합니다.

결과 값이 False라면 Pass 입니다.

# result의 값이 False라면 Pass 입니다.
self.assertFalse(retult)


assertGreater()

assertGreater(결과 값, 기대한 값)

결과 값이 기대한 값보다 큰지 확인합니다.

결과 값이 기대한 값보다 크다면 (결과 값 > 기대한 값) Pass 입니다.

# result의 값이 기대한 값(10)보다 크다면 Pass 입니다.
# result > 10
self.assertGreater(result, 10)


assertGreaterEqual()

assertGreaterEqual(결과 값, 기대한 값)

결과 값이 기대한 값보다 크거나 같은지 확인합니다.

결과 값이 기대한 값보다 크거나 같다면 (결과 값 >= 기대한 값) Pass 입니다.

# result의 값이 기대한 값(-3)보타 크거나 같다면 Pass 입니다.
# result >= -3
self.assertGreaterEqual(result, -3)


assertLess()

assertLess(결과 값, 기대한 값)

결과 값이 기대한 값보다 작은지를 확인합니다.

결과 값이 기대한 값보다 작다면 (결과 값 < 기대한 값) Pass 입니다.

# result의 값이 기대한 값(6)보다 작다면 Pass 입니다.
# result < 6
self.assertLess(result, 6)


assertLessEqual()

assertLessEqual(결과 값, 기대한 값)

결과 값이 기대한 값보다 작거나 같은지를 확인합니다.

결과 값이 기대한 갑보다 작거나 같다면 (결과 값 <= 기대한 값) Pass 입니다.

# result의 값이 기대한 값(81)보다 작거나 같다면 Pass 입니다.
# result <= 81
self.assertLessEqual(result, 81)


assertIn()

assertIn(찾으려는 문장, 전체 문장)

전체 문장에서 내가 찾으려는 문장이 들어 포함되었는지 확인합니다.

전체 문장에서 내가 찾으려는 문장이 있다면 Pass 입니다.

# 전체 문장에 'turn for'라는 글자가 있다면 Pass 입니다.
# My life suddenly took a turn for the better.
self.assertIn('turn for', result)


assertNotIn()

assertNotIn(찾으려는 문장, 전체 문장)

전체 문장에서 내가 찾으려는 문장이 들어 포함되지 않았는지 확인합니다.

전체 문장에서 내가 찾으려는 문장이 없다면 Pass 입니다.

# 전체 문장에 'tongchun'이라는 글자가 없다면 Pass 입니다.
# My life suddenly took a turn for the better.
self.assertNotIn('tongchun', result)


실행 결과를 자세히 보고싶을 경우 -v 옵션을 주면 됩니다.

D:\Test-Unittest>python unittest-sample.py -v
test_add_integers (__main__.TestNGLE) ... ok
test_add_strings (__main__.TestNGLE) ... ok
test_compare_integers (__main__.TestNGLE) ... ok
test_compare_strings (__main__.TestNGLE) ... ok
test_divide (__main__.TestNGLE) ... ok
test_involution (__main__.TestNGLE) ... ok
test_multiply (__main__.TestNGLE) ... ok
test_subtract (__main__.TestNGLE) ... ok

----------------------------------------------------------------------
Ran 8 tests in 0.006s

OK


여기까지 unittest에서 가장 많이 사용하는 8개 였습니다.


[참고] https://docs.python.org/3/library/unittest.html

Comments