`
darrendu
  • 浏览: 195680 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

01Junit不适合多线程并发测试

阅读更多
package com.test5;

import junit.framework.TestCase;

public class BadExampleTest extends TestCase {
	private Runnable runnable;

	public class DelayedHello implements Runnable {
		private int count;
		private Thread worker;

		private DelayedHello(int count) {
			this.count = count;
			worker = new Thread(this);
			worker.start();
		}

		public void run() {
			try {
				Thread.sleep(count);
				System.out.println("Delayed Hello World");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public void testExampleThread() throws Throwable {
		System.out.println("Hello, World"); // 1
		runnable = new DelayedHello(5000); // 2
		System.out.println("Goodbye, World"); // 3
	}

	public static void main(String[] args) {
		String[] name = { BadExampleTest.class.getName() };
		junit.textui.TestRunner.main(name);
	}

}

 如果你运行这个测试类,你会注意到一些错误。TextHellWorld()方法像你期望的那样运行和结束。它没有发出任何有关线程的异常,但是你却不会接受到来自线程的返回信息。注意,你不会看到“Delayed Hello World”。为什么?因为线程还在激活状态的时候,Junit已经执行完成。问题发生在下面这行,使线程执行结束的时候,你的测试不能反映出它的执行结果。这个问题行是在Junit的TestRunner中。它没有被设计成搜寻Runnable实例,并且等待这些线程发出报告,它只是执行它们并且忽略了它们的存在。因为这个原因,几乎不可能在Junit中编写和维护多线程的单元测试

分享到:
评论

相关推荐

    JUNIT多线程测试

    总结起来,进行JUNIT多线程测试是确保代码在并发环境下正确运行的关键步骤。通过使用JUnit提供的工具和机制,我们可以创建出模拟真实并发环境的测试用例,有效地检测和预防并发问题。这不仅提升了代码质量,也为团队...

    有关Junit和多线程测试的问题

    然而,当我们的应用涉及到多线程时,传统的JUnit测试可能会遇到挑战,因为多线程的并发行为往往难以预测,这导致测试的复杂性和困难度增加。在这种情况下,开发者需要寻找合适的工具和策略来解决这个问题。 ...

    Java多线程Junit测试GroboUtils-5.zip

    在多线程环境中使用JUnit进行测试会面临一些挑战,比如如何确保测试的线程安全,避免测试结果的不确定性,以及如何有效地模拟并发情况。GroboUtils-5可能就是为了解决这些问题而设计的工具集,它可能包含了用于创建...

    spring4+junit4.8 +多线程TheadTool

    6. **测试多线程应用**:在Junit4.8中,我们可以使用`@Rule`注解配合`org.junit.rules.ExternalResource`或`org.junit.rules.TestWatcher`来监控线程行为。此外,`org.junit.concurrent`包中的`Timeout`规则可以在...

    java并发测试

    总之,进行Java并发测试是为了确保系统在多线程环境中的健壮性和效率。通过编写和运行`MutiThreadTest.java`这样的测试用例,我们可以发现并解决潜在的并发问题,提升软件质量。同时,利用第三方库如`GroboUtils-5-...

    现代多线程 JAVA和c++多线程实现 测试和调试

    测试多线程程序是一项复杂的工作,因为并发问题往往难以预测且只在特定条件下出现。单元测试框架如JAVA的JUnit和C++的Google Test可以辅助测试,但可能需要专门设计测试用例来触发并发问题。死锁、竞态条件、资源...

    使用tempus-fugit多线程运行Junit Test

    `tempus-fugit`是一个开源工具,专门设计用于帮助开发者以多线程方式运行Junit测试。 `tempus-fugit`这个名字来源于拉丁语,意为“时间飞逝”,寓意这个库能够帮助我们节省时间。它提供了对Junit的扩展,支持并行...

    多线程测试组件groboutils

    它能够与JUnit、TestNG等主流的测试框架无缝对接,让多线程测试成为现有测试流程的一部分,而不是孤立的存在。 在实际使用中,groboutils的文档详尽且易懂,提供了丰富的示例代码,帮助开发者快速上手。同时,其...

    Junit单元测试(很经典)

    6. **并发测试**:使用`@Test.concurrent`(来自Junit Jupiter)或第三方库,可以进行并发测试,检验代码在多线程环境下的正确性。 综上所述,Junit作为一个强大的单元测试工具,不仅覆盖了基础的断言和异常测试,...

    多线程测试程序

    多线程是实现并发的一种方式,但并发并不总是意味着多线程。比如,Java的`CompletableFuture`和Python的`asyncio`库提供了基于事件循环的异步编程模型,也能实现高效的并发执行。 通过"多线程测试程序",开发者...

    java多线程模拟处理银行的实时转账交易

    最后,为了测试和验证多线程转账的正确性,我们可能需要编写单元测试,使用如JUnit这样的测试框架。测试场景应覆盖各种边界条件,如零金额转账、负金额转账、账户不存在等,确保在各种情况下都能正确处理。 总的来...

    JUnit_in_Action_01中文.pdf

    还会探讨如何处理并发测试,因为现代软件经常需要处理多线程情况,而并发测试能够暴露线程安全问题。 最后,书中可能还会涉及持续集成(Continuous Integration,CI)和持续测试(Continuous Testing)的概念,如...

    Java多线程矩阵相乘的代码

    在Java编程语言中,多线程是实现并发执行任务的关键技术。这个压缩包中的内容,"Java多线程矩阵相乘的代码",显然提供了一个示例,演示如何利用多线程来加速矩阵乘法这一计算密集型操作。矩阵相乘在科学计算、图像...

    ui自动化多线程+聚合报告

    `run_test_Multithreading.py`很可能是一个实现了多线程测试的Python脚本,它可能使用了Python的`threading`库或者第三方库如`concurrent.futures`来实现并发执行。 **聚合报告** 是一种将多个独立测试的结果汇总...

    Android大并发下载测试

    总结,"Android大并发下载测试"是一个综合性的测试项目,涵盖了网络编程、多线程技术、服务器性能、客户端优化等多个方面。通过这样的测试,开发者可以确保应用在实际大规模使用时的稳定性和效率,为用户提供优质的...

    Java多线程聊天

    Java多线程聊天程序是一种利用Java编程语言实现的并发通信应用,它允许多个用户在同一时间进行交互式的对话。在这个程序中,多线程技术被用来处理并发用户输入和消息传递,确保系统的高效运行和响应性。下面将详细...

    java项目史上最简单的多线程使用方法(demo)

    线程安全的类或方法在多线程环境下能正确工作,不会因并发访问导致数据不一致。 2. **并发控制** 使用`synchronized`关键字可以对方法或代码块进行同步,防止多个线程同时访问。此外,`ReentrantLock`提供了更灵活...

    覆盖率&并发性测试工具

    并发性测试主要检查以下几个方面:数据竞争(多个线程同时访问同一资源导致的不一致性)、死锁(两个或更多线程相互等待对方释放资源而形成的僵局)、活锁(线程间不断尝试获取资源但无法进行的情况)以及资源饥饿...

    Junit_work.zip_JUnit

    3. 考虑并发和多线程环境下的行为,确保线程安全。 在实际应用中,可以结合白盒测试和黑盒测试设计全面的测试策略。例如,使用JUnit的参数化测试(@Parameterized)来针对多种输入/输出组合进行测试,或者使用...

    Spring的多线程应用

    4. `src/test/java`:测试代码目录,可能包含测试多线程功能的JUnit测试类。 5. `README.md`:项目说明文件,可能包含项目简介、运行指南和示例解释。 通过分析这个项目,开发者不仅可以学习到Spring的多线程使用,...

Global site tag (gtag.js) - Google Analytics