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语句时,该测试函数的后续语句将不会被执行!

发布了113 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38883271/article/details/104905086
今日推荐