`
longgangbai
  • 浏览: 7330351 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SWTBot中junit4通知RunNotifier的使用

阅读更多

             在junit4中的监听接口为RunnerListener,具体的实现为:

 

package org.junit.runner.notification;

import org.junit.runner.Description;
import org.junit.runner.Result;

public class RunListener {
	public void testRunStarted(Description description) throws Exception {
	}

	public void testRunFinished(Result result) throws Exception {
	}

	public void testStarted(Description description) throws Exception {
	}

	public void testFinished(Description description) throws Exception {
	}

	public void testFailure(Failure failure) throws Exception {
	}

	public void testAssumptionFailure(Failure failure) {
	}

	public void testIgnored(Description description) throws Exception {
	}
}

 

通知的类为:

package org.junit.runner.notification;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.junit.runner.Description;
import org.junit.runner.Result;

public class RunNotifier {
	private final List<RunListener> fListeners;
	private boolean fPleaseStop;

	public RunNotifier() {
		this.fListeners = Collections.synchronizedList(new ArrayList());

		this.fPleaseStop = false;
	}

	public void addListener(RunListener listener) {
		this.fListeners.add(listener);
	}

	public void removeListener(RunListener listener) {
		this.fListeners.remove(listener);
	}

	public void fireTestRunStarted(Description description) {
		new SafeNotifier(description) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testRunStarted(this.val$description);
			}
		}.run();
	}

	public void fireTestRunFinished(Result result) {
		new SafeNotifier(result) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testRunFinished(this.val$result);
			}
		}.run();
	}

	public void fireTestStarted(Description description)
			throws StoppedByUserException {
		if (this.fPleaseStop)
			throw new StoppedByUserException();
		new SafeNotifier(description) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testStarted(this.val$description);
			}
		}.run();
	}

	public void fireTestFailure(Failure failure) {
		new SafeNotifier(failure) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testFailure(this.val$failure);
			}
		}.run();
	}

	public void fireTestAssumptionFailed(Failure failure) {
		new SafeNotifier(failure) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testAssumptionFailure(this.val$failure);
			}
		}.run();
	}

	public void fireTestIgnored(Description description) {
		new SafeNotifier(description) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testIgnored(this.val$description);
			}
		}.run();
	}

	public void fireTestFinished(Description description) {
		new SafeNotifier(description) {
			protected void notifyListener(RunListener each) throws Exception {
				each.testFinished(this.val$description);
			}
		}.run();
	}

	public void pleaseStop() {
		this.fPleaseStop = true;
	}

	public void addFirstListener(RunListener listener) {
		this.fListeners.add(0, listener);
	}

	private abstract class SafeNotifier {
		void run() {
			Iterator all;
			synchronized (RunNotifier.this.fListeners) {
				for (all = RunNotifier.this.fListeners.iterator(); all
						.hasNext();)
					try {
						notifyListener((RunListener) all.next());
					} catch (Exception e) {
						all.remove();
						RunNotifier.this.fireTestFailure(new Failure(
								Description.TEST_MECHANISM, e));
					}
			}
		}

		protected abstract void notifyListener(RunListener paramRunListener)
				throws Exception;
	}

 

SWTBot的截屏通知为:

package org.eclipse.swtbot.swt.finder.junit;

import org.apache.log4j.Logger;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;

/**
 * Captures screenshots on failure notifications.
 *
 * @author Hans Schwaebli (Bug 259787)
 * @version $Id$
 * @noinstantiate This class is not intended to be instantiated by clients.
 */
public final class ScreenshotCaptureListener extends RunListener {
	/** The logger. */
	private static Logger	log					= Logger.getLogger(SWTBotApplicationLauncherClassRunner.class);

	/** Counts the screenshots to determine if maximum number is reached. */
	private static int		screenshotCounter	= 0;

	public void testFailure(Failure failure) throws Exception {
		captureScreenshot(failure);
	}

	private void captureScreenshot(Failure failure) {
		try {
			int maximumScreenshots = SWTBotPreferences.MAX_ERROR_SCREENSHOT_COUNT;
			String fileName = SWTBotPreferences.SCREENSHOTS_DIR + "/" + failure.getTestHeader() + "." + SWTBotPreferences.SCREENSHOT_FORMAT.toLowerCase(); //$NON-NLS-1$
			if (++screenshotCounter <= maximumScreenshots) {
				captureScreenshot(fileName);
			} else {
				log.info("No screenshot captured for '" + failure.getTestHeader() + "' because maximum number of screenshots reached: " //$NON-NLS-1$ 
						+ maximumScreenshots);
			}
		} catch (Exception e) {
			log.warn("Could not capture screenshot", e); //$NON-NLS-1$
		}
	}

	private boolean captureScreenshot(String fileName) {
		return SWTUtils.captureScreenshot(fileName);
	}
	
	public int hashCode() {
		return 31;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		return true;
	}
	
}

 

分享到:
评论

相关推荐

    swtbot 详细例子说明

    4. **异常处理**:在测试过程中,如何捕获和处理可能出现的错误或异常。 5. **测试组织**:如何使用JUnit或其他测试框架组织测试用例,确保测试的顺序和独立性。 6. **测试驱动开发**:SWTBot如何帮助实现TDD(Test-...

    swtbot详细例子说明网页分享

    import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(SWTBotJunit4ClassRunner.class) public class HelloWorldTest { @...

    SWTBot自动化测试学习软件

    4. **断言和验证**:SWTBot提供了丰富的断言方法,可以用来验证控件的状态、内容或值是否符合预期,确保测试的准确性。 5. **测试套件和测试运行器**:SWTBot集成了JUnit,允许你组织测试用例成测试套件,并通过...

    swtbot学习资料

    在SWTBot中,你可以使用查找机制来定位GUI元素。这可以通过Widget的属性,如标签、ID或位置来实现。例如,`bot.button("OK")` 将找到并返回一个标签为"OK"的按钮对象,然后可以调用其方法执行点击操作。 接下来,...

    SWTBot插件包及例子

    在SWTBot的使用中,有几个关键知识点是开发者需要掌握的: 1. **安装与配置**:首先,开发者需要在Eclipse环境中安装SWTBot插件,这可以通过Eclipse的内置更新站点或下载离线包完成。安装后,需要导入相关的库到...

    使用SWTBOT进行GUI自动化测试

    根据给定的部分内容,我们可以了解到一个具体的实践案例:使用SWTBOT对名为“Pegasus RCP”的应用程序中的“File Menu”选项进行自动化测试。该测试包括了30个测试用例,总共有近1500行代码,旨在验证File Menu的...

    SWTBot收集

    使用SWTBot,你可以编写测试脚本来模拟用户在Eclipse RCP应用中的各种操作。例如,你可以创建一个测试来打开特定的视图,点击某个按钮,检查结果是否符合预期。SWTBot提供了如`Bot.button()`、`Bot.menu()`和`Bot....

    swtbot运行原理

    2. **对象定位**:SWTBot使用一种类似于XPath的表达式来定位应用程序中的UI元素。这种表达式称为“Bot查找策略”,可以基于控件的类型、文本、位置等多种属性找到目标控件。 3. **用户操作模拟**:一旦找到了目标...

    swtbot eclipse插件 测试界面

    swtbot eclipse插件 测试界面

    Web页面测试-swtbot

    ### Web页面测试-swtbot #### 一、Web页面测试的...通过使用诸如swtbot这样的工具,可以有效地提高测试的效率和准确性,确保Web应用的质量。对于任何从事Web开发的团队而言,掌握有效的测试方法和技术都是非常必要的。

    如何为EclipseJFaceUI运行单元测试Java开发

    4. 在Eclipse中配置JUnit运行配置,指定SWTBot测试运行器。 5. 运行测试并根据结果迭代改进代码。 通过遵循这些步骤,开发者可以有效地对Eclipse JFace UI应用程序进行单元测试,确保代码的质量和稳定性。

    scenarioo-e4-swtbot-example-integration

    方案示例-swtbot-e4 结合使用场景和SWTBot来测试和记录Eclipse RCP e4示例应用程序的示例UI测试和Scenarioo集成可在plugins/org.scenarioo.example.e4.test/src/org/scenarioo/example/e4文件夹中找到。构建并运行...

    SWT的自动化测试框架

    2. **创建测试类**:使用JUnit或其他测试框架创建测试类,并导入SWTBot相关的库。 3. **初始化Bot**:在测试类中,通常会在`setUp`方法中初始化SWTBot对象。 4. **编写测试用例**:使用SWTBot API编写测试步骤,...

    SWTBot - SWT/Eclipse functional testing-开源

    SWTBot是用于SWT / RCP应用程序的自动化和测试工具,具有记录和回放脚本的功能。 功能将包括基于文本的脚本,对测试套件的回放,报告和多线程回放的ant支持。

    Eclipse 4 Plug-in Development by Example: Beginner's Guide

    在介绍完基础和高级主题之后,书中继续讨论了如何使用Maven Tycho构建插件、功能和更新站点,并使用SWTBot来自动化用户界面测试。这一部分对于希望通过自动化流程来提高开发效率和质量的开发者来说非常重要。 最后...

    eclipse4.4.4+gmf+swtbot

    NULL 博文链接:https://mwhgjava.iteye.com/blog/2257771

    SWT的详解,例子,介绍

    **SWT(Standard Widget Toolkit)**是Java编程中用于...在深入学习和使用SWTBOT的过程中,不断实践和调试是至关重要的。通过《SWTBOT Tutorial》这样的资源,开发者能够逐步掌握这个强大的工具,提升GUI测试的技能。

    pdi-ui-test:基于SWTBot的用于Pentaho数据集成的UI测试的集合

    对于复杂的UI交互,如PDI的拖拽式设计和丰富的用户操作,使用自动化测试工具如SWTBot能显著提升测试的覆盖率和测试速度。 【文件名称列表】"pdi-ui-test-master"可能表示的是这个项目的主分支或者版本库,通常包含...

Global site tag (gtag.js) - Google Analytics