go 测试和文件

go 测试和文件

  • 需求
  • 传统测试
  • 单元测试
  • 牛刀小试
  • 总结
  • 练习
  • 文件介绍
    • 打开关闭文件
    • 读文件
    • 一次性读取文件
    • 写文件
    • 文件或文件夹是否存在
    • 文件拷贝

需求

有一个函数,怎样确认他运行结果是正确的?

func addUpper(n int)int  {
	res := 0
	for i := 1; i <= n; i++ {
		res+=1
	}
	return res
}

传统测试

在main中测试
缺点

  1. 不方便
  2. 不利于管理

单元测试

Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数测测试用例,也可以基于该框架写相应的压力测试用例,解决如下问题:

  1. 确保每个函数可行性
  2. 确保代码性能是好的
  3. 及时规避问题

牛刀小试


import (
	"testing"
	"wiaf.org/zhouhongjie/demo1/util"
)

func TestAddUpper(t *testing.T) {
	res := util.AddUpper(3)
	if res != 55 {
		t.Fatalf("Addupper(3) 执行错误,期望值 %v 实际值 %v ", 55, res)
	}
	t.Logf("Addupper(3) 运行正确")
}
func TestOk(t *testing.T) {

	t.Logf("测试TestOk 运行正确")
}

在这里插入图片描述
cd 到一 _test.go结尾的目录下,执行 go test -v,其下每一个测试用例方法都会执行

总结

  • 测试用例文件必须以 _test.go 结尾
  • 测试用例方法 必须是 TestXxx 的格式
  • 一个测是用例可以有多个测试用例函数
  • go test -v 会输出正确或错误的;go test 只会输出错误的
  • 测试某个文件(这里测试两个) go test -v cal_test.go cal.go
  • 测试某个方法 go test -v -test.run TestAddUpper

练习

package util

import (
	"encoding/json"
	"log"
)

type Monster struct {
	Name  string `json:"name"`
	Age   string `json:"age"`
	Skill string `json:"skill"`
}

func Serialize(monster Monster) string {
	marshal, err := json.Marshal(monster)
	if err != nil {
		log.Fatalf("序列化失败 ", err)
	}

	return string(marshal)

}

func UnSerialize(strMonster string) (monster *interface{}) {
	err := json.Unmarshal([]byte(strMonster), monster)
	if err != nil {
		log.Fatalf("反序列化失败 ", err)
	}
	return monster
}

package test

import (
	"testing"
	"wiaf.org/zhouhongjie/demo1/util"
)

func TestSerialize(t *testing.T) {
	monster := util.Monster{
		Name:  "牛魔王",
		Age:   "13",
		Skill: "牛角功",
	}
	serialize := util.Serialize(monster)
	t.Logf(serialize)
}

func TestUnSerialize(t *testing.T) {
	monster := util.UnSerialize("{\"name\":\"牛魔王\",\"age\":\"13\",\"skill\":\"牛角功\"}")
	u, ok := (*monster).(util.Monster)
	if ok {
		t.Log("转换成功 ", u)
	} else {
		t.Log("转换失败  ", u)

	}

}

文件介绍

文件在程序中以流的形式来操作的
输入流:程序 -> 文件
输出流:文件 -> 程序

os.File 封装文件相关操作
在这里插入图片描述

打开关闭文件


func TestFileBaseOpr(t *testing.T) {
	file, err := os.Open("/Users/mac/Desktop/diagram")
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			t.Fatal("关闭文件错误", err)
		}
	}(file)
	if err != nil {
		t.Fatal("打开文件失败", err)
	}
	t.Log("文件名称 ", file.Name())

}

读文件

func TestFileBaseOpr(t *testing.T) {
	file, err := os.Open("/Users/mac/go/src/wiaf.org/zhouhongjie/demo1/main/main.go")
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			t.Fatal("关闭文件错误", err)
		}
	}(file)
	if err != nil {
		t.Fatal("打开文件失败", err)
	}
	t.Log("文件名称 ", file.Name())

	reader := bufio.NewReader(file)

	for {
		readString, err := reader.ReadString('\n')
		if err == io.EOF {
			break
		}
		t.Log(readString)
	}
	 
}

一次性读取文件

func TestFileBaseOpr(t *testing.T) {
	// 这个包里边都过期了
	file, err := ioutil.ReadFile("/Users/mac/go/src/wiaf.org/zhouhongjie/demo1/test/cal1_test.go")
	if err != nil {
		t.Fatal("读取文件失败", err)
	}
	t.Log(string(file))
}

写文件

func TestFileBaseOpr(t *testing.T) {
	file, err := os.OpenFile("./text.txt", os.O_CREATE|os.O_APPEND, 0777)
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			t.Fatal("关闭失败", err)
		}
	}(file)
	if err != nil {
		t.Fatal("打开失败", err)
	}

	writer := bufio.NewWriter(file)
	_, err = writer.Write([]byte("hello world"))
	if err != nil {
		t.Fatal("写入失败", err)

	}
	err = writer.Flush()
	if err != nil {
		t.Fatal("刷盘失败", err)
	}

}

文件或文件夹是否存在


func PathExists(path string) (bool, error) {
	_, err := os.Stat("./text.txt")
	if err == nil {
		return true,nil
	}
	if os.IsNotExist(err){
		return false,nil
	}
	return false,err
}

文件拷贝

package test

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"testing"
)

func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
	srcFile, err := os.Open(srcFileName)
	if err != nil {
		fmt.Print("open file error", err)

	}
	reader := bufio.NewReader(srcFile)
	dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Printf("open file err = %v", err)
		return
	}
	writer := bufio.NewWriter(dstFile)
	defer dstFile.Close()

	return io.Copy(writer, reader)
}
func TestFileBaseOpr(t *testing.T) {
	CopyFile("./text.mp4", "/Users/mac/Desktop/硬件基础/day01/03_电学基础_电阻.mp4")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/577513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式学习笔记 - 开源实战五(下):总结Mybatis中用到的10种设计模式

概述 本章再对 Mybatis 用到的设计模式做一个总结。它用到的设计模式也不少。有些前面章节已经经过了&#xff0c;有些则比较简单。 SqlSessionFactoryBuilder&#xff1a;为什么要用建造者模式来创建 SqlSessionFactory&#xff1f; 在《Mybatis如何权衡易用性、性能和灵活性…

【算法基础实验】图论-UnionFind连通性检测之quick-find

Union-Find连通性检测之quick-find 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fin…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

用友政务财务系统FileDownload接口存在任意文件读取漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友政务财务系统是由用友软件开发的一款针对政府机…

maven-idea新建和导入项目

全局配置 新建项目 需要新建的文件夹 src/testsrc/test/javasrc/main/java 注&#xff1a;1、新建Java-class&#xff0c;输入.com.hello.hellomaven 2、快捷键psvm显示 public static void main(String[] args) {.... } package com.hello;public class hellomaven {publ…

初学python记录:力扣1146. 快照数组

题目&#xff1a; 实现支持下列接口的「快照数组」- SnapshotArray&#xff1a; SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时&#xff0c;每个元素都等于 0。void set(index, val) - 会将指定索引 index 处的元素设置为 val。int sna…

Git泄露和hg泄露原理理解和题目实操

一.Git泄露 1.简介 Git是一个开源的分布式版本控制系统&#xff0c;它可以实现有效控制应用版本&#xff0c;但是在一旦在代码发布的时候&#xff0c;存在不规范的操作及配置&#xff0c;就很可能将源代码泄露出去。那么&#xff0c;一旦攻击者发现这个问题之后&#xff0c;就…

【算法基础实验】图论-基于DFS的连通性检测

基于DFS的连通性检测 理论基础 在图论中&#xff0c;连通分量是无向图的一个重要概念&#xff0c;特别是在处理图的结构和解析图的组成时。连通分组件表示图中的一个子图&#xff0c;在这个子图中任意两个顶点都是连通的&#xff0c;即存在一条路径可以从一个顶点到达另一个顶…

如何消除浏览器SmartScreen对网站“不安全”提示?

面对互联网时代用户对网站安全性和可信度的严苛要求&#xff0c;网站运营者时常遭遇Microsoft Defender SmartScreen&#xff08;SmartScreen&#xff09;提示网站不安全的困扰。本文将剖析SmartScreen判定网站不安全的原因&#xff0c;并为运营者提供应对策略&#xff0c;以恢…

codeforce#933 题解

E. Rudolf and k Bridges 题意不讲了&#xff0c;不如去题干看图。 传统dp&#xff0c;每个点有两个选择&#xff0c;那么建桥要么不建。需要注意的是在状态转移的时候&#xff0c;桥是有长度的&#xff0c;如果不建需要前d格中建桥花费最少的位置作为状态转移的初态。 #incl…

发那科FANUC机器人R-2000iB平衡缸维修攻略

在发那科机器人中&#xff0c;平衡缸扮演着稳定机械臂运动的关键角色。它通过内部的压力调节来平衡负载&#xff0c;保证机器人的精准定位和平稳操作。一旦出现法兰克机械手平衡缸故障或损坏&#xff0c;机器人的性能可能会大打折扣&#xff0c;因此及时且正确的FANUC机械手平衡…

uniapp获取当前位置及检测授权状态

uniapp获取当前位置及检测授权定位权限 文章目录 uniapp获取当前位置及检测授权定位权限效果图创建js文件permission.jslocation.js 使用 效果图 Android设备 点击 “设置”&#xff0c;跳转应用信息&#xff0c;打开“权限即可”&#xff1b; 创建js文件 permission.js 新建…

HTTP基础知识

1. HTTP常见的状态码有哪些&#xff1f; 常见状态码&#xff1a; 200&#xff1a;服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。 301 &#xff1a; (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&a…

Java使用SpringBoot和EasyExcel 实现动态数据导出实战

Java使用SpringBoot和EasyExcel 实现动态数据导出实战 1、前言2、【资源地址】3、代码示例(demo)4、目前Java实现数据导出为Excel方式5、依赖6、总结 1、前言 工作中有用到将数据导出为Excel的场景&#xff0c;在此记录下。在日常开发中&#xff0c;Excel文件处理是一项常见的…

LeetCode 面试题 08.02——迷路的机器人

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题就是一个典型的图搜索题&#xff0c;一种就是广度优先搜索&#xff0c;一种就是深度优先搜索。 3. 代码实现 class Solution { public:vector<vector<int>> pathWithObstacles(vector<vecto…

软件需求管理规程(Word原件2024)

软件开发人员及用户往往容易忽略信息沟通&#xff0c;这导致软件开发出来后不能很好地满足用户的需要&#xff0c;从而造成返工。而返工不仅在技术上给开发人员带来巨大的麻烦&#xff0c;造成人力、物力的浪费&#xff0c;而且软件的性能也深受影响。所以在软件项目开发周期的…

Bellman Ford算法:解决负权边图的最短路径问题

Bellman Ford算法的介绍 在计算机科学的世界中&#xff0c;Bellman Ford算法是一种解决单源最短路径问题的算法&#xff0c;它可以处理有负权边的图。这个算法的名字来源于两位科学家Richard Bellman和Lester Randolph Ford&#xff0c;他们是这个算法的发明者。 这个算法的主…

hive启动beeline报错

问题一在zpark启动集群报错 出现上面的问题执行以下代码 chmod 777 /opt/apps/hadoop-3.2.1/logs 问题二启动beeline报错 执行 cd /opt/apps/hadoop-3.2.1 bin/hadoop dfsadmin -safemode leave 问题三执行查询语句报错 执行 set hive.exec.mode.local.autotrue;

公考相丽君政治素养研习课

公考相丽君政治素养研习课&#xff0c;是广大公考学子提升政治素养、深化政治理解的宝贵课程。相丽君老师以其深厚的政治理论功底和丰富的教学经验&#xff0c;为学员们呈现了一堂生动而深刻的政治课。课程中&#xff0c;相老师深入浅出地讲解了政治理论的基本概念和核心思想&a…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统&#xff0c;需下载与安装的Elasticsearch相同版本的&#xff0c;下载完成后解压安装包。 配置Logstash配…