Skip to content

Commit 9489c5c

Browse files
committed
test: 테스트코드 추가
1 parent bd3b60d commit 9489c5c

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
"""
2+
LLMResponseParser 클래스의 기능을 테스트하는 단위 테스트 모듈입니다.
3+
4+
주요 테스트 항목:
5+
- <SQL> 블록에서 SQL 쿼리 추출 성공/실패
6+
- <해석> 블록에서 자연어 설명 추출 성공/실패
7+
- 다양한 입력 형식(들여쓰기, 공백 등)에 대한 정규식 대응 여부 확인
8+
"""
9+
10+
import unittest
11+
12+
from llm_utils.llm_response_parser import LLMResponseParser
13+
14+
15+
class TestLLMResponseParser(unittest.TestCase):
16+
"""
17+
LLMResponseParser 클래스의 정적 메서드 동작을 검증하는 테스트 케이스입니다.
18+
19+
각 테스트는 SQL 및 해석 블록 추출 기능이 정상적으로 작동하는지,
20+
예외 상황에 올바르게 대응하는지를 검증합니다.
21+
"""
22+
23+
def test_extract_sql_success(self):
24+
"""
25+
<SQL> 블록과 ```sql``` 코드 블록이 정상적으로 포함된 문자열에서
26+
SQL 쿼리가 정확히 추출되는지 확인합니다.
27+
"""
28+
29+
text = """
30+
<SQL>
31+
```sql
32+
SELECT * FROM users;
33+
````
34+
35+
<해석>
36+
37+
```plaintext
38+
사용자 테이블의 모든 데이터를 조회합니다.
39+
```
40+
41+
"""
42+
expected_sql = "SELECT * FROM users;"
43+
result = LLMResponseParser.extract_sql(text)
44+
self.assertEqual(result, expected_sql)
45+
46+
def test_extract_sql_missing(self):
47+
"""
48+
<SQL> 블록은 존재하지만 코드 블록이 없을 경우,
49+
ValueError 예외가 발생하는지 확인합니다.
50+
"""
51+
52+
text = "<SQL> no code block here"
53+
with self.assertRaises(ValueError):
54+
LLMResponseParser.extract_sql(text)
55+
56+
def test_extract_interpretation_success(self):
57+
"""
58+
<해석> 블록과 ```plaintext``` 코드 블록이 포함된 문자열에서
59+
해석 텍스트가 정상적으로 추출되는지 확인합니다.
60+
"""
61+
62+
text = """
63+
```
64+
65+
<SQL>
66+
```sql
67+
SELECT * FROM users;
68+
```
69+
<해석>
70+
```plaintext
71+
사용자 테이블의 모든 데이터를 조회합니다.
72+
```
73+
"""
74+
expected = "사용자 테이블의 모든 데이터를 조회합니다."
75+
result = LLMResponseParser.extract_interpretation(text)
76+
self.assertEqual(result, expected)
77+
78+
def test_extract_interpretation_empty(self):
79+
"""
80+
<해석> 태그는 존재하지만 코드 블록이 없는 경우,
81+
빈 문자열을 반환하는지 확인합니다.
82+
"""
83+
84+
text = "<해석> 블록이 없습니다."
85+
result = LLMResponseParser.extract_interpretation(text)
86+
self.assertEqual(result, "")
87+
88+
def test_extract_sql_with_leading_whitespace(self):
89+
"""
90+
<SQL> 블록이 들여쓰기되어 있는 경우에도 SQL 쿼리를 정확히 추출하는지 확인합니다.
91+
"""
92+
93+
text = """
94+
```
95+
96+
<SQL>
97+
```sql
98+
SELECT id FROM orders;
99+
```
100+
<해석>
101+
```plaintext
102+
주문 테이블에서 ID 조회
103+
```
104+
"""
105+
expected = "SELECT id FROM orders;"
106+
result = LLMResponseParser.extract_sql(text)
107+
self.assertEqual(result, expected.strip())

0 commit comments

Comments
 (0)