рдЬрд╛рдУред FakeDbред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрддреНрд╕рд░реНрдЬрди

рджреВрд╕рд░реЗ рджрд┐рди рдореИрдВрдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд▓реЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде sql.Rows рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рднреА рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рдХрд╛рд░ рдПрдХ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рд╣реИ, рдФрд░ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЗрд╕реА рддрд░рд╣ рдмрдирд╛ рд░рд╣реЗред рд╡рд┐рд╖рдп рдкрд░ рдЦреЛрдЬ рднреА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ред


рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреЛрдЬ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рдореБрдЦреНрдп рдЧреЛ рд╡рд┐рддрд░рдг рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рдЙрдкрдХрд░рдг рд╣реИ: рдлреЗрдХрдбрдмред


рдпрд╣ рдЙрдкрдХрд░рдг рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд рдбреАрдмреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛ рдЯреЗрдмрд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирд╕реЗ рд╕рд░рд▓ рдирдореВрдиреЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЯреЗрдмрд▓ рдЕрд╕реНрдерд╛рдпреА рд╣реИрдВ рдФрд░ рдЬрдм рддрдХ FakeDb рдЙрджрд╛рд╣рд░рдг рдореМрдЬреВрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдорд╛рдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рджреЗрд░реА рдЕрдиреБрдХрд░рдг рдФрд░ рдЕрдиреБрдХрд░рдг рдЕрдкрд╡рд╛рдж рдЙрдкрд▓рдмреНрдз рд╣реИрдВред


FakeDb рдХрдорд╛рдВрдбреНрд╕


рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдкрдЯреНрдЯреА рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ - | рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдпрд╛ рддреЛ рдПрдХ рдХреАрд╡рд░реНрдб рдпрд╛ "рдХреА = рд╡реИрд▓реНрдпреВ" рд░реВрдк рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рд╣реИред


рдорд┐рдЯрд╛
рдЖрджреЗрд╢ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдЬрд╛рдВрдЪ рд╣реИ рдХрд┐ рдХреЛрдИ рдЧрддрд┐рд░реЛрдз рдирд╣реАрдВ рд╣реИред
рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:
WIPE


рдмрдирд╛рдПрдБ
рдХрдорд╛рдВрдб рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрд▓рдо рд╣реЛрддреЗ рд╣реИрдВред


рдХреЙрд▓ рдкреНрд░рд╛рд░реВрдк:


CREATE|_|1=,...,N=


рд╕рдорд░реНрдерд┐рдд рдкреНрд░рдХрд╛рд░:


  • bool
  • nullbool - рдмреВрд▓рд┐рдпрди рдпрд╛ null
  • int32
  • рддрд╛рд░
  • nullstring - string рдпрд╛ NULL
  • int64
  • nullint64 - int64 рдпрд╛ NULL
  • float64
  • nullfloat64 - float64 рдпрд╛ NULL
  • datetime
  • рдХреЛрдИ рднреА - рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдпрд╛рдиреА рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛

рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:


CREATE|people|name=string,age=int32,photo=any,dead=bool,bdate=datetime


рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ
рдХрдорд╛рдВрдб рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред


рдХреЙрд▓ рдкреНрд░рд╛рд░реВрдк:
INSERT|_|1=,...,N
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореВрд▓реНрдп рдХреЛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  1. рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 123 ред
  2. рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ "?" рдФрд░ рдорд╛рди рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред
  3. рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ "? рдкреИрд░рд╛рдореАрдЯрд░_рдирд╛рдо" рдФрд░ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред

рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:


INSERT|people|name=Alice,age=?,photo=?photo


рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рдЪрдпрди рдХреЗ рд╕рд╛рдеред
рдХреЙрд▓ рдкреНрд░рд╛рд░реВрдк:


 SELECT|_|1,...,N| SELECT|_|1,...,N|1=?,...,M 

рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:


 SELECT|categories|category_id,category_parent_id,category_name| SELECT|categories|category_id,category_parent_id,category_name|category_parent_id=?parent 

рдкрд░рд┐рдгрд╛рдо sql.Rows рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИред


WAIT
рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЖрджреЗрд╢ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЙрд▓ рдкреНрд░рд╛рд░реВрдк:
WAIT||


рджреЗрд░реА рдХреЛ рдПрдХ рдорд╛рддреНрд░рд╛ рдФрд░ рдорд╛рдк рдХреА рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрд╕ - рд╕реЗрдХрдВрдб, рдПрди - рдиреИрдиреЛрд╕реЗрдХрдВрдб, рдпреВ - рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб, рдПрдЪ - рдШрдВрдЯреЗ, рдФрд░ рдЗрд╕реА рддрд░рд╣ (рд╕рдордпред рдкрд░рд╕реЗрдб рдЕрд╡рдзрд┐ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред


рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:
WAIT|1s|SELECT|categories|category_id,category_parent_id,category_name|


рджрд╣рд╢рдд
рдПрдХ рдЖрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред
рдХреЙрд▓ рдкреНрд░рд╛рд░реВрдк:
PANIC|_|


MethodName рдХрд╛ рдорд╛рди stmt.panic рдлрд╝реАрд▓реНрдб (рдкреНрд░рдХрд╛рд░ fakeStmt) рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред


рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:
PANIC|blablabla|SELECT|categories|category_id,category_parent_id,category_name|


рдХреЗ рдЙрдкрдпреЛрдЧ


FakeDb рдХреЛ рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ "sql" рдкреИрдХреЗрдЬ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдЪреБрдирд╛ рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд░рдЦрд╛: рдЧрд┐рд╣реВрдм ред


рдкреИрдХреЗрдЬ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рд╕рдВрдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


 package packname import ( "fmt" "testing" "io/ioutil" "database/sql" "github.com/a1div0/fakedb" ) func TestFoo(t *testing.T) { fc := &fakedb.FakeConnector{ } db := sql.OpenDB(fc) if db.Driver() != fakedb.Fdriver { t.Error("OpenDB should return the driver of the Connector") return } if _, err := db.Exec("WIPE"); err != nil { t.Error("exec wipe: %v", err) } defer db.Close() db.Exec("CREATE|users|user_email=string,user_id=int64") db.Exec("INSERT|users|user_email=?,user_id=?", "test@email.com", 345) rows, err := db.Query( "SELECT|users|user_id|user_email=?email", sql.Named("email", user_email), ) if err != nil { t.Error(err) } result, err := Foo(rows) //   if err != nil { t.Error(err) } if result != 123 { t.Error(" ,   Foo()   ;)") } } 

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред


рдкреБрдирд╢реНрдЪ: рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ - рдХреНрдпрд╛ рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдиреБрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреМрди рд╕рд╛ рдкреИрдХреЗрдЬ?

Source: https://habr.com/ru/post/hi485280/


All Articles