Skip to content

Commit 24a6c71

Browse files
committed
add a simple sqlmock
1 parent 3f59d6e commit 24a6c71

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

sqlmock/sqlmock_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,104 @@ func TestQueryError(t *testing.T) {
112112
t.Errorf("expected ErrNoRows, got %v", err)
113113
}
114114
}
115+
116+
func TestGetMultipleUsers(t *testing.T) {
117+
// 1. 创建 mock 数据库
118+
mockDB := sqlmock.NewMock()
119+
120+
// 2. 期望一个查询并设置返回值
121+
mockDB.ExpectQuery("SELECT id, name, age FROM users").
122+
WillReturnRows([]string{"id", "name", "age"}, [][]driver.Value{
123+
{1, "John Doe", 30},
124+
{2, "Alice", 25},
125+
})
126+
127+
// 3. 打开数据库连接
128+
db, err := mockDB.Open("mock")
129+
if err != nil {
130+
t.Fatalf("failed to open database: %v", err)
131+
}
132+
133+
// 4. 创建仓库实例
134+
repo := &UserRepository{db: db}
135+
136+
// 5. 执行测试
137+
rows, err := repo.db.Query("SELECT id, name, age FROM users")
138+
if err != nil {
139+
t.Fatalf("unexpected error: %v", err)
140+
}
141+
defer rows.Close()
142+
143+
var users []User
144+
for rows.Next() {
145+
var user User
146+
if err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil {
147+
t.Fatalf("unexpected error: %v", err)
148+
}
149+
users = append(users, user)
150+
}
151+
152+
// 6. 验证结果
153+
if len(users) != 2 {
154+
t.Errorf("expected 2 users, got %d", len(users))
155+
}
156+
157+
expectedUsers := []User{
158+
{ID: 1, Name: "John Doe", Age: 30},
159+
{ID: 2, Name: "Alice", Age: 25},
160+
}
161+
162+
for i, user := range users {
163+
if user != expectedUsers[i] {
164+
t.Errorf("unexpected user at index %d: %+v", i, user)
165+
}
166+
}
167+
}
168+
169+
func TestMultipleQueries(t *testing.T) {
170+
// 1. 创建 mock 数据库
171+
mockDB := sqlmock.NewMock()
172+
173+
// 2. 期望多个查询并设置返回值
174+
mockDB.ExpectQuery("SELECT id, name, age FROM users WHERE id = ?").
175+
WithArgs(1).
176+
WillReturnRows([]string{"id", "name", "age"}, [][]driver.Value{
177+
{1, "John Doe", 30},
178+
})
179+
180+
mockDB.ExpectQuery("SELECT id, name FROM users WHERE name = ?").
181+
WithArgs("Alice").
182+
WillReturnRows([]string{"id", "name"}, [][]driver.Value{
183+
{2, "Alice"},
184+
})
185+
186+
// 3. 打开数据库连接
187+
db, err := mockDB.Open("mock")
188+
if err != nil {
189+
t.Fatalf("failed to open database: %v", err)
190+
}
191+
192+
// 4. 创建仓库实例
193+
repo := &UserRepository{db: db}
194+
195+
// 5. 执行测试
196+
user1, err := repo.GetUserByID(1)
197+
if err != nil {
198+
t.Fatalf("unexpected error: %v", err)
199+
}
200+
201+
var user2 User
202+
err = repo.db.QueryRow("SELECT id, name FROM users WHERE name = ?", "Alice").Scan(&user2.ID, &user2.Name)
203+
if err != nil {
204+
t.Fatalf("unexpected error: %v", err)
205+
}
206+
207+
// 6. 验证结果
208+
if user1.ID != 1 || user1.Name != "John Doe" || user1.Age != 30 {
209+
t.Errorf("unexpected user: %+v", user1)
210+
}
211+
212+
if user2.ID != 2 || user2.Name != "Alice" {
213+
t.Errorf("unexpected user: %+v", user2)
214+
}
215+
}

0 commit comments

Comments
 (0)