일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cloud
- 토플
- 자동매매
- backtest
- toefl writing
- 오토사
- AWS
- 퀀트
- 아마존 웹 서비스
- 암호화폐
- Bitcoin
- 클라우드
- backtrader
- can
- 백테스트
- 파이썬
- probability
- 프로그래밍
- python
- 자동차sw
- AUTOSAR
- 토플 라이팅
- 개발자
- 백트레이더
- 확률
- TOEFL
- GeorgiaTech
- 비트코인
- 블록체인
- it
- Today
- Total
Leo's Garage
smtm #2 - TDD 예시 본문
지난 시간에 이어서 smtm 코드 내에 TDD 예시 코드를 분석해보겠다.
https://github.com/msaltnet/smtm
자 지난 시간에 우리는 업비트에서 제공하는 REST API 예제를 살펴보았다.
자 그런데 여기서 REST API가 뭔지 모르는 분도 있을 테니 간단히 설명하겠다.
REST API는 두 컴퓨터 시스템이 인터넷을 통해서 전달하는 정보를 안전하게 교환하기 위한 일종의 약속이자 Interface라고 생각하면 된다.
자 그러면 테스트를 수행할 코드를 살펴보자
"""TDD 연습용 모듈"""
import json
import requests
import copy
class TddExercise:
URL = "https://api.upbit.com/v1/candles/minutes/1"
QUERY_STRING = {"market": "KRW-BTC"}
def __init__(self):
self.data = []
self.to = None
self.count = 100
def set_period(self, to, count):
self.to = to
self.count = count
def initialize_from_server(self):
"""Open Api를 사용해서 데이터를 가져와서 초기화한다"""
query_string = {"market": "KRW-BTC", "to": self.to, "count": self.count}
response = requests.get(self.URL, params=query_string)
self.data = response.json()
# print(self.data)
# print(self.data[0])
해당 Class를 살펴보면, 생성자에서 기본적으로 to와 count값을 초기화한다.
여기서 앞서 살펴본 업비트의 REST API를 다시 살펴볼 필요가 있다.
curl --request GET \
--url 'https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=50' \
--header 'accept: application/json'
여기서 ? 뒤에 market이나 count를 parameter라고 한다.
이것은 유저가 서버에 특정 정보를 요청하려고 할 때, 좀 더 구체적으로 질문을 하도록 세부사항을 전달하는 것이라고 보면된다.
단 unit은 /minutes/1로 표기한다.
이러한 옵션은 몇 가지가 있는데 여기서 우리가 살펴 볼 옵션들을 나열하겠다.
uint : 데이터의 간격(분) 1, 3, 5, 10
to : 데이터의 마지막 시간 2018-04-18ㅆ10:16:00
count : 데이터의 개수
market : 마켓 정보 KRW-BTC
이 예제에서는 unit과 market을 1과 KRW-BTC로 고정한다
다시 코드로 돌아와서 살펴 보면
set_period함수는 to와 count를 업데이트해주고, initialize_from_server 함수는 해당 parameter와 함께 REST API를 호출하고 그 결과를 받는다.
자 그러면 이 코드에 대한 테스트 코드를 작성해보자
class TddExerciseTests(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_set_period_update_period_correctly(self):
ex = TddExercise()
# check default value
self.assertEqual(ex.to, None)
self.assertEqual(ex.count, 100)
ex.set_period("2020-02-25T06:41:00Z", 10)
self.assertEqual(ex.to, "2020-02-25T06:41:00Z")
self.assertEqual(ex.count, 10)
def test_initialize_from_server_update_data_correctly_example(self):
ex = TddExercise()
self.assertEqual(len(ex.data), 0)
ex.initialize_from_server()
self.assertEqual(len(ex.data), 100)
test_set_period_update_period_correctly 함수를 살펴보자.
TddExercise로 객체를 생성하고 객체의 각 맴버 변수들의 초기 값이 잘 들어왔는지 확인한다.
두번째로 set_period를 통해서 to와 count를 업데이트하고 실제 값들이 해당 값으로 업데이트 되었는지 확인한다.
test_initialize_from_server_update_data_correctly_example 함수를 살펴보면, 객체 생성 직후 데이터는 당연히 없으므로 0이 맞다.
초기화 함수를 호출하고 나면 기본적으로 100개의 데이터를 얻어오게 되므로 데이터는 100이 되는지 확인하면 코드가 정상적으로 돌아가는지 알 수 있다.
이런식으로 각 코드들의 요구사항에 맞게 테스트 코드를 짤 수 있다.
이 리뷰는 아래 책을 바탕으로 작성되었습니다.
http://www.yes24.com/Product/Goods/107635612
'Study > AutoTradingBot' 카테고리의 다른 글
smtm #3 - mock (0) | 2023.01.15 |
---|---|
smtm #1 - TDD 맛보기 (0) | 2023.01.06 |