6

测试的断言应该怎么写?

问与答ggaaooppeenngg1668 次浏览

我用 t.Assert
```
active = true
t.Assert(active==true)
```
报错这个 `reflect: NumField of non-struct type` 是什么原因?

 

共6个回复
kevin 回复
func (t AppTest) TestAssert() {
	println("TestAssert")
	exp := true
	t.Assert(exp == true)
}

我这里没有报错

ggaaooppeenngg 回复

如果换成 AssertEqual呢?

ggaaooppeenngg 回复

好像没区别,但是我也不知道怎么就报这样的错了.

ggaaooppeenngg 回复

我一点一点注释试出来,是我用了一个模型的指针,不知道反射的时候对代码做了什么,可能没出初始化指针的内容还是怎样,拿不到这个结构体,真不知道是怎么回事.下面是我的激活测试.

 40 func (t *RegisterTest) TestRegisterActiveCode() {
 41         
 42         var user models.User
 43         defer engine.Delete(&user)
 44         form := url.Values{
 45                 "user.Name":            []string{"testName"},
 46                 "user.Email":           []string{"test@test.com"},
 47                 "user.Password":        []string{"testtest"},
 48                 "user.ConfirmPassword": []string{"testtest"},
 49         }
 50         form.Add("user.Haha", "sadd")
 51         t.PostForm("/Account/PostRegist", form)
 52         user = new(models.User)
 53         has, err := engine.Where("email =?", "test@test.com").Get(user)
 54         t.Assert(err == nil)
 55         t.Assert(has)
 56         t.Assert(user.ActiveCode != "")
 57         t.Get("/Account/Activate/" + user.ActiveCode)
 58         t.AssertOk()
 59         user = new(models.User)
 60         has, err = engine.Where("email =?", "test@test.com").Get(user)
 61         t.Assert(has)
 62         t.AssertEqual(nil, err)
 63         println(user)
 64         active := true
 65         t.AssertEqual(true, active)
 66         println("active code")
 67 }

 

如果models.User 声明的时候是指针就会有问题,报错的意思应该是这整个组件反射不了,导致反射的时候出现不是结构体类型的错误,具体原因要等有时间翻翻源码看看,测试方面的文档很少.

kevin 回复
user = new(models.User)

改成

user = models.User{}

 

 

ggaaooppeenngg 回复

的确需要这样