junit源码解析总结

前面的博客我们也已经整理到了,我们使用junit38,在写测试类的时候我们的测试类必须继承TestCase。这个所有测试类的父类在junit.framework包下面。

前面我们的整理都是说直接在IDE中直接运行测试类,右击然后run as junit。当然我们还可以自己写main方法来运行测试,其实都一样。

OK,现在我们来写一个例子,直接运行测试类的main方法来跑测试。代码如下:

package org.linkinpark.commons.textui;

import org.linkinpark.commons.framework.TestCase;
import org.linkinpark.junit.Assert;

/**
 * @创建作者: LinkinPark
 * @创建时间: 2016年2月4日
 * @功能描述: 写一个测试类,用main方法来驱动测试。
 */
public class LinkinTest2 extends TestCase
{

	public void test1()
	{
		Assert.assertEquals("1", "1");
	}

	/**
	 * @创建时间: 2016年2月4日
	 * @相关参数: @param args
	 * @功能描述: 调用TestRunner来run测试。
	 */
	public static void main(String[] args)
	{
		TestRunner.run(LinkinTest2.class);
	}

}

前面的3篇博客,我已经认真的整理过了junit测试的3个步骤,这里做一个总结。

我们来自己写的测试类上的一个测试方法打一个断点,然后看下eclipse中junit方法调用的情况。

      


OK,上面的2张图很直接了说明了测试开始到测试方法真正被执行的所有的过程,我在这里也不做赘述了。之后的结果收集,无疑就是在每个测试类中传递一个TestResult类,通过printerWriter来打印日志而已,这里也不在赘述了。


在前面的演示junit源码过程中,我自己也修改了好多的控制台输出。最后这里写2个测试例子,来一起看下控制台的输出,整体回顾下junit的整个测试过程好了。

2个测试类代码如下:

package org.linkinpark.commons.textui;

import org.linkinpark.commons.framework.TestCase;
import org.linkinpark.junit.Assert;

public class LinkinTest1 extends TestCase
{
	
	public LinkinTest1(String methodName)
	{
		super(methodName);
	}
	
	public void setUp()
	{
		System.out.println("这里是自己定义的setUp()");
	}
	
	public void tearDown()
	{
		System.out.println("这里是自己定义的tearDown()");
	}
	
	public void testLinkin4Normal()
	{
		System.out.println("======>开始执行被测试代码====");
		final String str = "林肯:这里是自己的被测试的正确代码";
		System.out.println(str);
		System.out.println("======>结束执行被测试代码====");
		Assert.assertEquals(str, str);
	}
	
	public void testLinkin8Error()
	{
		System.out.println("======>开始执行被测试代码====");
		final String str = "林肯:这里是自己的被测试的错误代码";
		System.out.println(str);
		System.out.println("======>结束执行被测试代码====");
		Assert.assertEquals("这里是我期望的错误逻辑输出", str);
	}
	
}
package org.linkinpark.commons.textui;

import org.linkinpark.commons.framework.TestCase;
import org.linkinpark.junit.Assert;

public class LinkinTest1 extends TestCase
{

	public LinkinTest1(String methodName)
	{
		super(methodName);
	}

	public void testLinkin()
	{
		Assert.assertTrue(true);
	}

}
package org.linkinpark.commons.textui;

import org.linkinpark.commons.framework.Test;
import org.linkinpark.commons.framework.TestCase;
import org.linkinpark.commons.framework.TestSuite;

public class LinkinTestAll extends TestCase
{
	
	public static Test suite()
	{
		TestSuite suite = new TestSuite().addTestSuite(LinkinTest.class);
		return suite.addTest(new LinkinTest1("testLinkin"));
	}

	public static void main(String args[])
	{
		TestRunner.run(suite());
	}

}

以下是控制台输出:

###########开始迭代运行整套测试,互相独立###########
第一步:框架开始打印日志====
~~~~~~~~~~~~~~~~~~~~~~~
第二步:框架开始运行测试====
这里是自己定义的setUp()
框架开始执行测试,执行的方法是-->public void org.linkinpark.commons.textui.LinkinTest.testLinkin4Normal()
======>开始执行被测试代码====
林肯:这里是自己的被测试的正确代码
======>结束执行被测试代码====
框架结束执行测试,执行的方法是-->public void org.linkinpark.commons.textui.LinkinTest.testLinkin4Normal()
这里是自己定义的tearDown()
第三步:框架结束运行测试====
~~~~~~~~~~~~~~~~~~~~~~~
###########开始迭代运行整套测试,互相独立###########
第一步:框架开始打印日志====
~~~~~~~~~~~~~~~~~~~~~~~
第二步:框架开始运行测试====
这里是自己定义的setUp()
框架开始执行测试,执行的方法是-->public void org.linkinpark.commons.textui.LinkinTest.testLinkin8Error()
======>开始执行被测试代码====
林肯:这里是自己的被测试的错误代码
======>结束执行被测试代码====
这里是自己定义的tearDown()
第三步:框架结束运行测试====
~~~~~~~~~~~~~~~~~~~~~~~
KAO,有报错啦!!!
###########开始迭代运行整套测试,互相独立###########
第一步:框架开始打印日志====
~~~~~~~~~~~~~~~~~~~~~~~
第二步:框架开始运行测试====
====框架执行默认的setUp====
框架开始执行测试,执行的方法是-->public void org.linkinpark.commons.textui.LinkinTest1.testLinkin()
框架结束执行测试,执行的方法是-->public void org.linkinpark.commons.textui.LinkinTest1.testLinkin()
====框架执行默认的tearDown====
第三步:框架结束运行测试====
~~~~~~~~~~~~~~~~~~~~~~~
第四步:框架开始统计时间====
耗时:0.024秒
遗憾:!一共有1个错误:
1) testLinkin8Error(org.linkinpark.commons.textui.LinkinTest)org.linkinpark.junit.ComparisonFailure: 期望是:<[这里是我期望的错误逻辑输出]> 结果却是:<[林肯:这里是自己的被测试的错误代码]>
	at org.linkinpark.junit.Assert.assertEquals(Assert.java:104)
	at org.linkinpark.junit.Assert.assertEquals(Assert.java:135)
	at org.linkinpark.commons.textui.LinkinTest.testLinkin8Error(LinkinTest.java:42)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.linkinpark.commons.framework.TestCase.runTest(TestCase.java:117)
	at org.linkinpark.commons.framework.TestCase.runBare(TestCase.java:53)
	at org.linkinpark.commons.framework.TestResult$1.protect(TestResult.java:251)
	at org.linkinpark.commons.framework.TestResult.runProtected(TestResult.java:154)
	at org.linkinpark.commons.framework.TestResult.run(TestResult.java:254)
	at org.linkinpark.commons.framework.TestCase.run(TestCase.java:42)
	at org.linkinpark.commons.framework.TestSuite.runTest(TestSuite.java:322)
	at org.linkinpark.commons.framework.TestSuite.run(TestSuite.java:316)
	at org.linkinpark.commons.framework.TestSuite.runTest(TestSuite.java:322)
	at org.linkinpark.commons.framework.TestSuite.run(TestSuite.java:316)
	at org.linkinpark.commons.textui.TestRunner.doRun(TestRunner.java:113)
	at org.linkinpark.commons.textui.TestRunner.doRun(TestRunner.java:98)
	at org.linkinpark.commons.textui.TestRunner.run(TestRunner.java:58)
	at org.linkinpark.commons.textui.LinkinTestAll.main(LinkinTestAll.java:18)
第五步:框架开始统计结果====
结果:AU,出错啦!
Tests run: 3,  Failures: 0,  Errors: 1
第六步:框架结束整个测试====


OK,junit源码解析就先整理到这里吧。接下来,我会整理junit4中的一些高级特性,之后再整理下junit中用的一些设计模式。


转载于:https://www.cnblogs.com/LinkinPark/p/5232882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值