单元测试报告
123012011112 陈星
1引言
1.1编写目的
根据测试计划报告,对软件进行测试,详细记录测试过程,以对软件的质量进行评价,为软件设计人员提供BUG依据,故做产生测试分析报告。
1.2背景
本次测试报告为期末项目大学生兼职网的单元测试总结报告,创建,修改,删除的数据测试,注册功能的单元测试,通过分析测试结果,描述系统是否符合大学生兼职网的需求。预期参考人员包括用户、测试人员、开发人员、项目管理者、质量管理人员和需要阅读本报告的高层经理
1.3定义
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
2、测试结果
第二篇:单元测试实践报告
第三章 单元测试实践
一、实验目的
1、 掌握白盒测试方法,并按单元测试的要求设计测试用例。
2、能熟练应用自动化单元测试工具进行单元测试;
掌握如何制定测试计划
二、实验内容
掌握白盒测试的基本理论,能够利用白盒测试理论设计测试用例,并在所开发的软件中进行测试。白盒测试技术要求掌握语句覆盖、分支覆盖、路径覆盖等白盒测试用例设计方法,
自动化测试是对手工测试的有益补充,可以通过自动化测试工具提高测试效率,改善软件产品质量。NUnit是为.Net开发环境准备的自动化单元测试框架,JUnit是针对Java语言设计的自动化单元测试工具,它们的作用就是帮助测试人员方便的完成单元测试工作,本项目要求利用NUnit/JUnit对软件开发过程中的软件模块进行单元测试。
Visual Studio 2010集成开发环境通过集成Visual Studio Ultimate 2010和VS Test Professional 2010等工具对软件测试提供了强有力的支持,可以创建和管理单元测试,UI测试,web测试,负载测试等。本项目要求熟悉利用Visual Studio.2010进行单元测试,UI测试,web测试,负载测试。
本实验要求采用任一所熟悉的开发语言、实现任一给定题目或自选题目(注意:最后给出的是基于对话框的程序),利用白盒测试技术设计测试用例,进行单元测试。根据所设计测试用例,采用NUnit/JUnit/VS2010实现自动化测试,并给出代码覆盖情况。
1、三角形问题
接受三个整数a、b和c作为输入,用做三角形的边。程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形。(说明:三边边长小于200)
2、电话号码问题
某城市电话号码由三部分组成。它们的名称和内容分别是:
地区码:空白或三位数字;
前 缀:非'0'或'1'的三位数字;
后 缀:4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
3、保险公司计算保费费率的程序
某保险公司的人寿保险的保费计算方式为:
投保额×保险费率
其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:
表3-1
4、某公司薪水计算程序
某软件的一个模块的需求规格说明书中描述,如图3-1所示:
(1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。
(2)非年薪制员工:严重过失,扣当月薪资的8%;过失,扣当月薪资的4%。
5、公交一卡通自动充值软件
图3-1
图3-2
6、两位整数加法计算器
图3-3
三、实验要求
1、 独立完成;
2、 提交源代码,源代码中应包含必要的注释(注释量占代码的20%以上);
3、 提交可执行程序;
4、 提交测试用例说明书及缺陷报告。
说明:
有两份源代码,一份是直接写在测试用例中的,另一份则是可执行文件的源代码 单元测试源代码:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Salary
{
/// <summary>
/// UnitTest1 的摘要说明
/// </summary>
[TestClass]
public class UnitTest1
{//至于为何不用bool,一是bool比int多敲一次键盘,二是true和false比1、2多敲3和4次键盘
int flag_year;//年薪制还是月薪制
int flag_mistake;//是否有过失
int mistake_level;//过失严重程度
double riskfund=10000;//年终风险金,不过在exe里我把年钟风险金换成了年薪 double monthsalary=2000;//月薪
public UnitTest1()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
private TestContext testContextInstance;
/// <summary>
///获取或设置测试上下文,该上下文提供
///有关当前测试运行及其功能的信息。
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
#region 附加测试特性
//
// 编写测试时,可以使用以下附加特性:
//
// 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
// [ClassInitialize()]
// public static void MyClassInitialize(TestContext testContext) { }
//
// 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
// [ClassCleanup()]
// public static void MyClassCleanup() { }
//
// 在运行每个测试之前,使用 TestInitialize 来运行代码
// [TestInitialize()]
// public void MyTestInitialize() { }
//
// 在每个测试运行完之后,使用 TestCleanup 来运行代码
// [TestCleanup()]
// public void MyTestCleanup() { }
//
#endregion
public int[] Salary(int [,]list)
{
int []re_list=new int[8];
for (int i = 0; i < list.Length/3; i++)//Test_Method中的list是个3X8的二维数组,所以取长度/3
{
flag_year = list[i, 0]; flag_mistake = list[i, 1]; mistake_level = list[i, 2]; /*bool error_flag = true;
Console.WriteLine("年终风险金:" + riskfund + " " + "月薪:" + monthsalary);
while (error_flag)
{
Console.WriteLine("输入员工薪水类型(1.年薪制 2.月薪制):"); if (Console.Read() == '1')
{
flag_year = true;
error_flag = false;
}
if (Console.Read() == '2')
{
flag_year = false;
error_flag = false;
}
else
{
Console.WriteLine("薪水类型输入错误");
}
}
error_flag = true;
while (error_flag)
{
Console.WriteLine("输入员工是否存在过失(1.有 2.无):"); if (Console.Read() == '1')
{
flag_mistake = true;
error_flag = false;
}
if (Console.Read() == '2')
{
flag_mistake = false;
error_flag = false;
}
else
{
Console.WriteLine("员工是否存在过失输入错误"); }
}
error_flag = true;
while (error_flag)
{
Console.WriteLine("输入员工过失情况(1.有 2.无):"); if (Console.Read() == '1')
{
mistake_level = true;
error_flag = false;
}
if (Console.Read() == '2')
{
mistake_level = false;
error_flag = false;
}
else
{
Console.WriteLine("员工过失情况输入错误"); }
}*/
riskfund = 10000;
monthsalary = 2000;
if (flag_year == 1)
{
if (flag_mistake == 1)
switch (mistake_level)
{
case 0:
riskfund = (1 - 0.02) * riskfund;
break;
case 1:
riskfund = (1 - 0.04) * riskfund;
break;
}
//Console.WriteLine("年终风险金:");
re_list[i] = (Int32)riskfund;
}
else if (flag_year == 0)
{
if (flag_mistake == 1)
switch (mistake_level)
{
case 0:
monthsalary = (1 - 0.04) * monthsalary;
break;
case 1:
monthsalary = (1 - 0.08) * monthsalary;
break;
}
//Console.WriteLine("月薪:");
re_list[i] = (Int32)monthsalary;
}
}
return re_list;
}
[TestMethod]
public void TestMethod1()
{
int[,] list = new int[,] { { 0, 0, 0 }, { 0, 0, 1 }, { 0, 1, 0 },{0,1,1}, { 1, 0, 0 }, { 1, 0, 1 }, { 1, 1, 0 }, { 1, 1, 1 } };
/*list就相当于flag集,得出的结果为0%,2%,4%,8%,本来想试试用用逻辑门电路能不能简少代码量,不过想想还是算了
000,001,010,011,100,101,110,111
*/
int [] actual=new int[8];//这个就是结果(最终年薪?/风险金、月薪)存放的地方了 int [] expected_list=new int[]{2000,2000,1920,1840,10000,10000,9800,9600};//预计中对应0,2%,4%,8%四种rate的结构
actual=Salary(list);
for (int i = 0; i < list.Length / 3;i++ )
Assert.AreEqual(expected_list[i], actual[i]);
//
// TODO: 在此处添加测试逻辑
//
}
}
}
可执行源代码
using ;
using System.Collections.Generic; using System.ComponentModel; using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Windows.Forms;
namespace salary
{
public partial class Form1 : Form
{ int flag_year=0;
int flag_mistake=0;
int mistake_level=0;
double rate = 0;
double monthsalary;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e) {
monthsalary=Convert.ToDouble(textBox3.Text);
}
private void radioButton1_CheckedChanged(object sender, EventArgs e) {
flag_year = 1;
}
private void radioButton2_CheckedChanged(object sender, EventArgs e) {
flag_year = 0;
}
private void radioButton5_CheckedChanged(object sender, EventArgs e) {
flag_mistake = 0;
}
private void radioButton4_CheckedChanged(object sender, EventArgs e) {
flag_mistake = 1;
mistake_level = 1;
}
private void radioButton3_CheckedChanged(object sender, EventArgs e) {
flag_mistake = 1;
mistake_level = 2;
}
private void textBox6_TextChanged(object sender, EventArgs e) {
}
private void textBox5_TextChanged(object sender, EventArgs e) {
}
private void button1_Click(object sender, EventArgs e)
{
if (flag_year == 1)
{
if (flag_mistake == 1)
{
if (mistake_level == 1)
{
textBox6.Text = "2%";
rate = 0.02;
}
else
{
textBox6.Text = "4%";
rate = 0.04;
}
}
else
{
textBox6.Text = "0%";
rate = 0;
}
}
else
if (flag_mistake == 1)
{
if (mistake_level == 1) {
textBox6.Text = "4%";
rate = 0.04;
}
else
{
textBox6.Text = "8%";
rate = 0.08;
}
}
else
{
textBox6.Text = "0%";
rate = 0;
}
if (flag_year == 1)
{
textBox5.Text = Convert.ToString(monthsalary * 12 * rate); textBox4.Text = Convert.ToString(monthsalary * 12*(1-rate)); }
else if (flag_year == 0)
{
textBox5.Text = Convert.ToString(monthsalary * rate); textBox4.Text = Convert.ToString(monthsalary*(1-rate)); }
}
private void textBox4_TextChanged(object sender, EventArgs e) {
}
}
}