programming코딩

Start Python #6 Backend Program 만들기 – Test하기

Chapter #5 DBModel에서 기본적인 프로그램은 완료되었습니다. 오늘은 프로그램을 Test하기 위해 Code를 만들어보겠습니다.

오늘은 이 기능이 제대로 동작하는지 test code를 만들어 확인하도록 하겠습니다.

Full code는 github에 repository에 있으며 commit d3194d3 을 기준으로 설명합니다.

Test하기

pytest로 test하기

AiLottoApp 객체를 먼저 생성하되 실제 사용되는 table을 test로 쓸 수가 없어 별도로 test용으로 만들어놓은 table을 사용합니다.

app = AiLottoApp('db_ailotto_test')

Test Code를 하나 살펴보겠습니다.

Numbers class를 이용하여 정상적인 번호를 하나 만들었습니다.

그리고 그 번호를 DBTable에 추가합니다.

이전에 만들었던 create method는 성공 여부에 따라서 True 또는 False를 return하도록 했었습니다.

그리고 다시 DB로부터 읽어보고 그 결과가 저장했던 Numbers와 같은지 비교를 다시 함으로써 Database Table에 Write, Read를 확인하게 됩니다.

# create & read
goodNumbers = Numbers(1, [22, 14, 42, 3, 8, 11], 5)
assert app.winNumbersRepository.create(goodNumbers) == True
assert app.winNumbersRepository.read(1) == goodNumbers

__eq__ 와 ==

app.winNumbersRepository.read(1) == goodNumbers

여기서 == 는 값이 같다고 해서 서로 다른 객체이기 때문에 같은게 아닙니다.

앞서 Deep Copy와 Shallow Copy에 대해서 적은 글이 있습니다.

아무튼 그래서 Numbers Class에 __eq__ method를 override하여 만들었습니다.

그래서 내용이 같으면 같은 걸로 처리하도록 해줍니다.

Test 결과

예상할 수 있는 다양한 경우를 만들어 넣었기 때문에 앞으로는 이 test만 문제가 없으면 AiLottoApp의 기능은 문제가 없겠죠?

실행 결과는 다음과 같습니다.

test_AiLottoApp.py가 test되었고 그 안에서 하나의 test case가 pass되었습니다.

마치며

Full code는 github에 repository에 있습니다.

로또당첨번호를 관리하는 코드는 완성되었습니다.

이제는 이걸 이용하여 서비스를 운용할 단계입니다.

다음 Chapter는 동행복권에서 제공하는 reset api를 통해서 Lotto 번호를 매주 가져와서 database에 update하도록 하겠습니다.

Leave a Reply