预期测试失败,但是测试成功了

jiangyd · 2019-08-01 13:41:53 · 822 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-08-01 13:41:53 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "testing"
)

type wallet struct {

    bitcoin int
}

func TestTb(t *testing.T)  {
    wa:=wallet{}
    wa.deposit(10)


    got:=wa.balance()
    want:=10

    if got!=want{
        t.Errorf("got %d want %d",got,want)
    }
}

func (w *wallet) deposit(v int)  {
    w.bitcoin+=v

}

func (w wallet) balance()int  {

    return w.bitcoin
}

运行结果

=== RUN   TestTb
--- PASS: TestTb (0.00s)
PASS

按我的理解,wallet结构的balance方法,为值接收者,而不是指针接收者,按道理是返回0的


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

822 次点击  
加入收藏 微博
2 回复  |  直到 2019-08-07 00:32:46
jarlyyn
jarlyyn · #1 · 6年之前

按你的理解也是报错,凭什么返回0....

go只是自动帮你做了一个语法糖,让你能狗直接通过. 操作取到指针对应的值或者方法方法而已。

streamingmind
streamingmind · #2 · 6年之前

deposit方法用的是指针接收者,已经修改了内部状态 btcoin 了,balance() 返回的固然也是10,不管用的是指针还是值接收者

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传