数独_单元测试

十年热恋 提交于 2020-01-19 20:56:04

目录

单元测试

      数独生成模块的测试

      求解数独模块的测试

      mainfun函数的测试

      计算文件行数函数的测试


单元测试

单元测试主要分为5部分,

  • 数独生成模块的测试

  • 数独题目生成模块的测试

  • 求解数独模块的测试

  • mainfun函数的测试

  • 计算文件行数函数的测试

数独生成模块的测试

由于数独生成模块终局路径不由用户给出,所以不用测试路径的合法性,只需测试生成不同数量的终局,由于需求要求生成数独个数在1~1000000之间,而且通过mainfun函数的合法性判断,数独生成模块generate_final的参数取值只可能为1~1000000。为所以我们给出的测试用例分别为。

为了检验是否生成所给要求的数独,实现了一个函数,可以通过计算终局文件的行数来确定生成终局的个数。

测试内容 测试用例
生成终局数目 0
  1
  500
  1000000
TEST(GenerateTest, size1) {
	generate_final(1, FINALPATH);
	int sign = value_file(1, FINALPATH);
	EXPECT_TRUE(sign);
}
TEST(GenerateTest, size500) {
	generate_final(500, FINALPATH);
	int sign = value_file(500, FINALPATH);
	EXPECT_TRUE(sign);
}
TEST(GenerateTest, size1e6) {
	generate_final(1000000, FINALPATH);
	int sign = value_file(1000000, FINALPATH);
	EXPECT_TRUE(sign);
}

求解数独模块的测试

求解数独可能会出现以下几种情况,题目文件不存在,题目文件没有内容,题目文件符合要求。

所以需要设计3个测试用例

题目文件不存在

  1. 设slove_all函数所传参数为 test_noexist.txt(目录中不存在的文件)

  2. 调用slove_all函数,查看返回值是否正确

题目文件没有内容

  1. 建立test_empty.txt文件

  2. 调用slove_all函数,查看返回值是否正确

题目文件符合要求

  1. 检查默认题目文件是否存在,是否有数独

  2. 如果符合条件则调用slove_all函数

  3. 如果不符合条件调用generate_que函数生成一定数量的数独

  4. 调用slove_all函数

  5. 调用isvalue_sudoku函数检查所解数独是否正确。

/测试解数独结果的正确性,保证数独题目文件内有题目,否则先生成数独题目
TEST(SolutionTest, answersright) {
	ifstream ifile;
	ifile.open(QUESTIONPATH);
	if (!ifile) {
		generate_que(10);
	}
	ifile.close();
	slove_all(QUESTIONPATH);
	int sign=isvalue_sudoku(SOLUTIONPATH);
	EXPECT_TRUE(sign);
}
//测试解数独,当数独文件不存在时
TEST(SolutionTest, nofile) {
	char filename[] = "test_noexist.txt";
	int sign=slove_all(filename);
	EXPECT_EQ(sign, 1);
}
//测试解数独,当数独文件为空时
TEST(SolutionTest, emptyfile) {
	char filename[] = "test_empty.txt";
	ofstream ofile;
	ofile.open(filename);
	ofile.close();
	int sign = slove_all(filename);
	EXPECT_EQ(sign,2 );
}

结果:

mainfun函数的测试

此函数实现获取命令行参数,检查命令合法性,并调用不同的函数的功能。

需要测试所给命令的参数个数,不同的功能参数(-c,-s,-q),以及不同功能参数下的参数(如范围,字母数字等)

测试内容 类型 测试用例
参数个数 2个 argc=2,argv={ " ","-c" }
  3个 argc=3,argv={ " ","-c","100" }
  4个 argc=4,argv={ " ","-c","100","11" }
其他参数 -aa argc=3,argv={ " ","-aa","100" }

 

测试内容 类型 测试用例
-c 参数 负数 argc=3,argv={ " ","-c","-2" }
  0 argc=3,argv={ " ","-c","0" }
  1 argc=3,argv={ " ","-c","1" }
  1000000 argc=3,argv={ " ","-c","1000000" }
  1000008 argc=3,argv={ " ","-c","1000008" }
  字母 argc=3,argv={ " ","-c","aa" }

 

由于生成数独在函数内会判断是否小于等于终局数,此处已经在终局文件中生成50个数独终局

测试内容 类型 测试用例
-q参数 负数 argc=3,argv={ " ","-q","-1" }
  all argc=3,argv={ " ","-q","all" }
  字符 argc=3,argv={ " ","-q","aa" }
  数目大于终局数 argc=3,argv={ " ","-q","51" }
  数目小于等于终局数 argc=3,argv={ " ","-q","49" }

结果:

计算文件行数函数的测试

linenum函数已经确保文件存在.

在测试中,首先需要建立一个文件text_line.txt ,然后给文件写入不同的行

测试内容 测试用例
行数 0
  1
  1000000

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!