테스트 터미널 명령어
python manage.py test
테스트 코드는 순서가 보장되지 않음
setup을 통해 우선순위 지정 가능
from datetime import date
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def fromBirthYear(cls,name,birthYear):
return cls(name,date.today().year-birthYear)
def display(self):
print(self.name,str(self.age))
# person = Person('son',29)
# person.display()
person = Person.fromBirthYear('son',1995)
person.display()
classmoethod를 통해 생성자 호출도 동시에 가능
class Person:
...
@staticmethod
def isAdult(age):
return age>18
클래스 외부, 함수로 작성한것과 동일한 기능을하는 메소드 생성
사용하는 이유는 클래스 내부에서만 사용할 기능이며, 코드의 가독성을 위해 사용한다.
class ArticleCreateTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.user_data = {'email':'test@naver.com','password':'123'}
cls.article_data = {'title':'제목','content':'내용'}
cls.user = User.objects.create_user('test@naver.com','123')
def setUp(self):
self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
class ArticleCreateTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.user_data = {'email':'test@naver.com','password':'123'}
cls.article_data = {'title':'제목','content':'내용'}
cls.user = User.objects.create_user('test@naver.com','123')
def setUp(self):
self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
# 로그인 하지 않았을때 글 작성을 할 수 없는지 테스트
def test_fail_if_not_logged_in(self):
url = reverse('article_view')
response = self.client.post(url,self.article_data)
self.assertEqual(response.status_code,401)
# 게시글 작성 테스트
def test_create_articles(self):
response = self.client.post(
path=reverse('article_view'),
data=self.article_data,
HTTP_AUTHORIZATION = f"Bearer {self.access_token}"
)
self.assertEqual(response.status_code,201)
# 게시글 작성 조건을 충족하지 못할 경우
def test_fail_if_not_create_articles(self):
response = self.client.post(
path=reverse('article_view'),
# data=self.article_data,
HTTP_AUTHORIZATION=f"Bearer {self.access_token}"
)
self.assertEqual(response.status_code,400)
import
from django.test.client import MULTIPART_CONTENT, encode_multipart,BOUNDARY
from PIL import Image
import tempfile
임시파일 생성 함수
def get_temporary_image(temp_file):
size = (200,200)
color = (255,0,0,0)
image = Image.new("RGBA",size,color)
image.save(temp_file,'png')
return temp_file
메소드 추가
class ArticleCreateTest(APITestCase):
....생략
def test_create_article_with_image(self):
# 임시 이미지 파일 생성
temp_file = tempfile.NamedTemporaryFile()
temp_file.name = "image.png"
image_file = get_temporary_image(temp_file)
image_file.seek(0)
# article_data dict update
self.article_data['image'] = image_file
# 전송
response = self.client.post(
path=reverse('article_view'),
data=encode_multipart(data = self.article_data, boundary=BOUNDARY),
content_type=MULTIPART_CONTENT,
HTTP_AUTHORIZATION=f"Bearer {self.access_token}"
)
self.assertEqual(response.status_code, 201)
pip install Faker
from faker import Faker
fake = Faker("ko_KR")
print(fake.name())
print(fake.first_name())
print(fake.last_name())
print(fake.word())
print(fake.sentence())
print(fake.text())