golang是一种现代的编程语言,它有很多吸引人的特点,如高效、简单、具有强大的并发支持等。golang的测试工具也是非常强大的,这篇文章将会深入介绍golang的测试用法。
在Golang中,测试代码与被测试的代码是分开的。这是为了避免测试代码与生产代码混淆,而且使得测试代码的编写更加简单和易于维护。测试代码放在单独的文件中,以_test.go结尾,这意味着测试代码可以使用和访问生产代码的所有内容,但生产代码不能使用测试代码的任何内容。
在Golang中,测试有两种形式:单元测试和集成测试。单元测试用于测试一个函数或方法,而集成测试则用于测试一个系统的多个组件之间的相互作用是否正确。
首先,让我们看一下单元测试的用法。下面是一个简单的加法函数的测试代码:
package main import "testing" func TestAdd(t *testing.T) { input1 := 1 input2 := 2 expected := 3 result := Add(input1, input2) if result != expected { t.Errorf("Add(%d, %d) = %d; want %d", input1, input2, result, expected) } }
登录后复制
测试函数需要以Test开头,接着是测试函数的名称。测试函数的参数是t *testing.T,它可以用于检查测试函数是否通过或错误。在这个例子中,测试函数检查Add函数是否正确计算1和2的总和,如果结果不是3,则会输出一个错误信息。
当执行go test命令时,会自动执行TestAdd函数并输出结果。如果函数成功通过测试,则不会有任何输出,否则将会输出错误信息,如下所示:
--- FAIL: TestAdd (0.00s) main_test.go:10: Add(1, 2) = 4; want 3
登录后复制
接下来,让我们看一下集成测试的用法。下面是一个简单的web应用程序的测试代码:
package main import ( "net/http" "net/http/httptest" "testing" ) func TestIndexHandler(t *testing.T) { req, err := http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() handler := http.HandlerFunc(IndexHandler) handler.ServeHTTP(rr, req) if rr.Code != http.StatusOK { t.Errorf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK) } expected := "Hello, world!" if rr.Body.String() != expected { t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) } }
登录后复制
在这个例子中,我们创建了一个HTTP请求并使用httptest.NewRecorder()函数来创建一个响应记录器。然后我们使用http.HandlerFunc函数创建一个处理程序并将请求和响应记录器传递给它。最后,我们检查响应的状态码和主体内容是否正确。
当执行go test命令时,测试代码将会启动我们的web应用程序并执行测试。如果测试成功通过,则不会有任何输出,否则会输出错误信息。
总结一下,Golang的测试工具非常强大而且易于使用。它们可以帮助我们编写可靠的软件,并且可以很容易地维护和更新我们的测试代码。无论是单元测试还是集成测试,Golang的测试工具都提供了一种简单而有效的方式来保证代码的正确性,因此在编写Golang代码时,我们应该经常使用它们。
c语言中double的用法
c语言中double的用法
目前,随着计算机在人们生活和工作中的普及,其教学研究地位也在逐渐提升。C语言是一种计算机程序设计语言,其具有高级语言和汇编语言的特点。下面小编就跟你们详细介绍下c语言中double的用法,希望对你们有用。
c语言中double的用法如下:
double、float都是浮点型。double(双精度型)比float(单精度型)存的数据更准确些,占的空间也更大。double精度是float的两倍,所以需要更精确的计算常使用double。
单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.
知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。