Go语言testing——测试误差平方和是否满足条件

package chapter03
import "math"

type Slice struct{
	Y_slice []float64    //真实值
	Y_eslice []float64    //预测值
	Mean_error []float64   //误差
}

func (this *Slice) Error(arr1 []float64,arr2 []float64) (arr3 []float64){
	for i := 0;i < len(arr1);i++{
		arr3 = append(arr3,0)
	}
	for index,value := range arr1{
		arr3[index] = value - arr2[index]
	}
	return arr3
}

func (this *Slice) MeanError(arr3 []float64) float64{
	sum := 0.0
	for _,value := range arr3{
		sum += math.Pow(value,2)
	}
	return sum
}
package chapter03

import (
	"testing"
	"fmt"
)

func TestCal(t *testing.T)  {
	s := Slice{
		Y_slice : []float64{20.3,20.5,21.5,21.8,22.0,22.5,22.6,23.3},
		Y_eslice : []float64{20.2,20.3,21.6,21.6,21.9,22.6,22.8,23.2},
	}
	s.Mean_error = s.Error(s.Y_slice,s.Y_eslice)
	average := s.MeanError(s.Mean_error)
	if average > 0.5{
		t.Fatalf("误差平方和为%v大于设定值0.5!",average)
	}else{
		fmt.Printf("误差平方和为%v小于设定值0.5!\n",average)
	}
	t.Logf("测试成功!")
}

测试结果:
=== RUN TestCal
误差平方和为0.1700000000000006小于设定值0.5!
TestCal: cal_test.go:20: 测试成功!
— PASS: TestCal (0.00s)
PASS
ok go_code/project01/chapter03 0.406s

若对Y_eslice稍作改动使得所得误差平方和大于0.5,所得测试结果如下
=== RUN TestCal
TestCal: cal_test.go:16: 误差平方和为23.170000000000012大于设定值0.5!
— FAIL: TestCal (0.00s)
FAIL
exit status 1
FAIL go_code/project01/chapter03 0.342s

首先看一下Fatalf的官方文档:

func (c *B) Fatalf(format string, args …interface{})
调用 Fatalf 相当于在调用 Logf 之后调用 FailNow 。

FailNow的官方文档:

func (c *B) FailNow()
将当前的测试函数标识为“失败”,并停止执行该函数。在此之后,测试过程将在下一个测试或者下一个基准测试中继续。 FailNow 必须在运行测试函数或者基准测试函数的 goroutine 中调用,而不能在测试期间创建的 goroutine 中调用。调用 FailNow 不会导致其他 goroutine 停止。

Logf的官方文档:

func (c *B) Logf(format string, args …interface{})
Log 使用与 Printf 相同的格式化语法对它的参数进行格式化, 然后将格式化后的文本记录到错误日志里面。 如果输入的格式化文本最末尾没有出现新行, 那么将一个新行添加到格式化后的文本末尾。
对于测试来说,Logf 产生的格式化文本只会在测试失败或者设置了 -test.v 标志的情况下被打印出来; 对于基准测试来说, 为了避免 -test.v 标志的值对测试的性能产生影响, Logf 产生的格式化文本总会被打印出来。

通过官方文档我们发现,Fatalf方法先调用Logf,将错误信息记录到日志中,再调用FailNow结束该测试函数的执行。一旦编译器检测到不满足条件需要执行Fatalf语句时,该测试函数的后续语句将不会被执行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值