@@ -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