java的测试代码怎么写 java测试方法怎么写

JUnit代码测试是什么?怎么写代码?

分类: 电脑/网络 程序设计 其他编程语言

浔阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

解析:

JUnit是Java进行单元测试的一个框架, 需要下载junit, 3.8版本和后来的4.0以后版本编写测试的方法略有不同,

在3.8.2中需要导入junit.framework.中的类, 进行测试的类必须继承自TestCase类, 测试方法名称中需要含test字样, 可以在setup和teardown函数中管理一些每个测试函数都需要的资源比如数据库连接等,在测试函数中使用assert开头的函数来进行测试代码开发.以下是从junit文档中摘出的范例:

import junit.framework.Test;

import junit.framework.TestCase;

import junit.framework.TestSuite;

/**

* Some simple tests.

*

*/

public class SimpleTest extends TestCase {

protected int fValue1;

protected int fValue2;

protected void setUp() {

fValue1= 2;

fValue2= 3;

}

public static Test suite() {

/*

* the type safe way

*

TestSuite suite= new TestSuite();

suite.addTest(

new SimpleTest("add") {

protected void runTest() { testAdd(); }

}

);

suite.addTest(

new SimpleTest("testDivideByZero") {

protected void runTest() { testDivideByZero(); }

}

);

return suite;

*/

/*

* the dynamic way

*/

return new TestSuite(SimpleTest.class);

}

public void testAdd() {

double result= fValue1 + fValue2;

// forced failure result == 5

assertTrue(result == 6);

}

public void testDivideByZero() {

int zero= 0;

int result= 8/zero;

result++; // avoid warning for not using result

}

public void testEquals() {

assertEquals(12, 12);

assertEquals(12L, 12L);

assertEquals(new Long(12), new Long(12));

assertEquals("Size", 12, 13);

assertEquals("Capacity", 12.0, 11.99, 0.0);

}

public static void main (String[] args) {

junit.textui.TestRunner.run(suite());

}

}

在4.0.2中的变化是:

测试需要@.junit.Test的Annotation标记,其他部分也使用了Annotation标记,setup和teardown使用@.junit.Before 和@.junit.After, 在eclipse3.1的环境中不支持4.0.2, 可以使用junit 4.0.2中提供的adapter类来帮助eclipse内置的junit发现新版本的测试函数

Java开发如何编写出优秀的Java单元测试

使用框架来用于单元测试

Java提供了若干用于单元测试的框架。TestNG和JUnit是最流行的测试框架。JUnit和TestNG的一些重要功能:

易于设置和运行。

支持注释

允许忽略或分组并一起执行某些测试。

支持参数化测试,即通过在运行时指定不同的值来运行单元测试。

通过与构建工具,如Ant,Maven和Gradle集成来支持自动化的测试执行。

EasyMock是一个模拟框架,是单元测试框架,如JUnit和TestNG的补充。EasyMock本身不是一个完整的框架。它只是添加了创建模拟对象以便于测试的能力。例如,我们想要测试的一个方法可以调用从数据库获取数据的DAO类。在这种情况下,EasyMock可用于创建返回硬编码数据的MockDAO。这使我们能够轻松地测试我们意向的方法,而不必担心数据库访问。

谨慎使用测试驱动开发!

测试驱动开发(TDD)是一个软件开发过程,在这过程中,在开始任何编码之前,我们基于需求来编写测试。由于还没有编码,测试最初会失败。然后写入最小量的代码以通过测试。然后重构代码,直到被优化。

目标是编写覆盖所有需求的测试,而不是一开始就写代码,却可能甚至都不能满足需求。TDD是伟大的,因为它导致简单的模块化代码,且易于维护。总体开发速度加快,容易发现缺陷。此外,单元测试被创建作为TDD方法的副产品。

然而,TDD可能不适合所有的情况。在设计复杂的项目中,专注于最简单的设计以便于通过测试用例,而不提前思考可能会导致巨大的代码更改。此外,TDD方法难以用于与遗留系统,GUI应用程序或与数据库一起工作的应用程序交互的系统。另外,测试需要随着代码的改变而更新。

因此,在决定采用TDD方法之前,应考虑上述因素,并应根据项目的性质采取措施。

测量代码覆盖率

代码覆盖率衡量(以百分比表示)了在运行单元测试时执行的代码量。通常,高覆盖率的代码包含未检测到的错误的几率要低,因为其更多的源代码在测试过程中被执行。测量代码覆盖率的一些最佳做法包括:

使用代码覆盖工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高测试质量,因为这些工具可以指出未经测试的代码区域,让你能够开发开发额外的测试来覆盖这些领域。

每当写入新功能时,立即写新的测试覆盖。

确保有测试用例覆盖代码的所有分支,即if / else语句。

高代码覆盖不能保证测试是完美的,所以要小心!

尽可能将测试数据外部化

在JUnit4之前,测试用例要运行的数据必须硬编码到测试用例中。这导致了限制,为了使用不同的数据运行测试,测试用例代码必须修改。但是,JUnit4以及TestNG支持外部化测试数据,以便可以针对不同的数据集运行测试用例,而无需更改源代码。

使用断言而不是Print语句

许多新手开发人员习惯于在每行代码之后编写System.out.println语句来验证代码是否正确执行。这种做法常常扩展到单元测试,从而导致测试代码变得杂乱。除了混乱,这需要开发人员手动干预去验证控制台上打印的输出,以检查测试是否成功运行。更好的方法是使用自动指示测试结果的断言。

构建具有确定性结果的测试

一些方法不具有确定性结果,即该方法的输出不是预先知道的,并且每一次都可以改变

除了正面情景外,还要测试负面情景和边缘情况

通常,开发人员会花费大量的时间和精力编写测试用例,以确保应用程序按预期工作。然而,测试负面测试用例也很重要。负面测试用例指的是测试系统是否可以处理无效数据的测试用例。例如,考虑一个简单的函数,它能读取长度为8的字母数字值,由用户键入。除了字母数字值,应测试以下负面测试用例:

用户指定非字母数字值,如特殊字符。

用户指定空值。

用户指定大于或小于8个字符的值。

类似地,边界测试用例测试系统是否适用于极端值。例如,如果用户希望输入从1到100的数字值,则1和100是边界值,对这些值进行测试系统是非常重要的。

编辑一个Java问题测试程序怎么写

是控制台输入吗。为了方便类都写一个里面了。可以参考下

建立一个题目实体(标题、4个选项属性、正确答案);

建立一个结果实体(标题、是否正确结果、选择的答案、正确答案);

建立一个题目list集合,用于存放题目(每个难度对应一个list);

建立一个结果list集合,用于存放作答后的信息;

创建对应的题目对象,实体化实体,并且放入对应的list里面

根据选择对应的难度找到对应难度的list集合;

然后遍历这个集合,依次显示每个题目的信息,并让用户作答,答完一个显示下一个题目,

获取用户选择的答案,用这个答案跟实体中的正确答案做比较;

创建结果实体对象,将比较后的信息set到实体中。(标题、正确结果、选择的答案、正确答案);

将这个结果实体放入到结果list集合中;循环结束后遍历结果list集合显示就可以了。

代码:

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class SaveLog {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

// 提示信息

System.out.println("请输入数字选择题目难度,1:简单,2:困难");

// 获取到对应难度的题目

ListQuestion questionList = getQuestionByLevel(in.nextInt());

// 创建结果list

ListQuestionResult questionResults = new ArrayListQuestionResult();

// 总答题,正确,错误

int questionCount = questionList.size();

int correntCount = 0;

int errorCount = 0;

// 遍历题目

for (int i = 0; i  questionList.size(); i++) {

// 获取到题目

Question question = questionList.get(i);

System.out.println("题目" + (i + 1) + ":" + question.getTitle());

// 获取到题目选项并打印控制台

ListString selected = question.getList();

for (String string : selected) {

System.out.println(string);

}

// 获取到选择的答案

String corrent = in.next();

// 获取到做题结果

QuestionResult qr = setQuestionResult(question, corrent);

// 计算错误与正确的题目

if (corrent.equalsIgnoreCase(question.getCorrentResult())) {

correntCount = correntCount + 1;

} else {

errorCount = errorCount + 1;

}

// 放入结果集合

questionResults.add(qr);

}

System.out.println("您一共答了" + questionCount + "道题,其中正确的为" + correntCount + "题,错误为" + errorCount + "题");

System.out.println();

// 遍历结果

for (QuestionResult questionResult : questionResults) {

if (!questionResult.getSelected().equals(questionResult.getCorrentResult())) {

System.out.println("错误题目:" + questionResult.getTitle());

System.out.println("是否正确:" + questionResult.getResult());

System.out.println("选择的答案:" + questionResult.getSelected() + ",正确答案:" + questionResult.getCorrentResult());

System.out.println();

}

}

}

public static QuestionResult setQuestionResult(Question question, String corrent) {

QuestionResult result = new QuestionResult();

result.setCorrentResult(question.getCorrentResult());

result.setTitle(question.getTitle());

result.setSelected(corrent);

// 如果答案正确

if (corrent.equalsIgnoreCase(question.getCorrentResult())) {

result.setResult("正确");

} else {

result.setResult("错误");

}

return result;

}

/** 根据难度获取对应题目(1:简单。2:困难) */

public static ListQuestion getQuestionByLevel(int level) {

ListQuestion result = null;

if (level == 1) {

// 创建list集合用于存放题目,简单难度

ListQuestion questionList = new ArrayListQuestion();

// 添加题目到list

Question question = new Question();

question.setTitle("中国文化博大精深,请问1+2等于几?");

// 题目答案选项

ListString list = new ArrayListString();

list.add("A:1");

list.add("B:2");

list.add("C:3");

list.add("D:6");

question.setCorrentResult("C");

question.setList(list);

// 将题目放到list集合

questionList.add(question);

// 设置返回结果

result = questionList;

} else if (level == 2) {

// 创建list集合用于存放题目,简单难度

ListQuestion questionList = new ArrayListQuestion();

// 添加题目到list

Question question = new Question();

question.setTitle("朝辞白帝彩云间的下一句是什么?");

// 题目答案选项

ListString list = new ArrayListString();

list.add("A:千里江陵一日还");

list.add("B:野火烧不尽");

list.add("C:离离原上草");

list.add("D:智商捉鸡");

question.setCorrentResult("A");

question.setList(list);

// 将题目放到list集合

questionList.add(question);

// 设置返回结果

result = questionList;

}

return result;

}

}

/** 题目结果类 */

class QuestionResult {

/** 题目名称 */

private String title;

/** 是否正确 */

private String result;

/** 选择的答案 */

private String selected;

/** 正确答案 */

private String correntResult;

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getResult() {

return result;

}

public void setResult(String result) {

this.result = result;

}

public String getSelected() {

return selected;

}

public void setSelected(String selected) {

this.selected = selected;

}

public String getCorrentResult() {

return correntResult;

}

public void setCorrentResult(String correntResult) {

this.correntResult = correntResult;

}

}

/** 题目类 */

class Question {

/** 题目名称 */

private String title;

/** 题目的所有选项 */

private ListString list;

/** 正确答案 */

private String correntResult;

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public ListString getList() {

return list;

}

public void setList(ListString list) {

this.list = list;

}

public String getCorrentResult() {

return correntResult;

}

public void setCorrentResult(String correntResult) {

this.correntResult = correntResult;

}

}


名称栏目:java的测试代码怎么写 java测试方法怎么写
标题来源:http://ybzwz.com/article/doiedjh.html