Junit测试进行多线程编程、并发测试频现问题!?

jahentao jahentao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
学习多线程的时候,想省点事,用Junit写单元测试,可是总得不到预期结果?!
代码如下:

//本类模拟成一个Servlet组件
public class LoginServlet {

private static String usernameRef;
private static String passwordRef;

public static void doPost(String username, String password) {
try {
usernameRef = username;
if (username.equals("a")) {
Thread.sleep(1000);
}
passwordRef = password;

System.out.println("username=" + usernameRef + " password="
+ password);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



//模拟A用户登录
public class ALogin extends Thread {
@Override
public void run() {
LoginServlet.doPost("a", "aa");
}
}



//模拟B用户登录
public class BLogin extends Thread {
@Override
public void run() {
LoginServlet.doPost("b", "bb");
}
}


下面是不同的地方,
用Junit4测试

@Test
public void test() {
ALogin a = new ALogin();
a.start();
BLogin b = new BLogin();
b.start();
}

测试结果:

username=b password=bb

会发现,用户A登录的进程在sleep之后,就再也没有醒来 ...
找了半天一直以为程序出错了,可换成main方法执行时,如下:

public static void main(String[] args) {
ALogin a = new ALogin();
a.start();
BLogin b = new BLogin();
b.start();
}

这样测试,就正常了,成功模拟出"线程不安全"的情况。
输出:

username=b password=bb
username=b password=aa


感觉好坑{{{(>_<)}}},Junit不能进行并发程序的单元测试吗?怎么感觉少了一个线程?!
...全文

相关推荐

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

介绍有关Junit和多线程测试的问题。Junit和许多开源软件项目集成在一起,但是Junit执行多线程的单元测试有一些问题。这篇文章介绍Junit的一个扩展类库———GroboUtils

zzAlan

JUnit框架下多线程测试的实现与重要性

RuleTestRule接口包含单个方法apply,它接收一个Statement参数,并返回一个新的Statement。Statement是一个运行测试的可执行体。TestRule接口的实现可以通过包装传入的Statement来改变其行为。@Override// 在执行测试前可以做一些准备工作// 执行原始的测试语句// 在执行测试后可以做一些清理工作CustomRule类实现TestRule接口,并在测试执行前后添加了自定义的行为。@Rule。

诡道荒行

Java中JUnit的测试方法的并发执行

JUnit是Java开发中广泛使用的单元测试框架,它为开发者提供了便捷的方式来编写和运行测试用例。传统的JUnit测试方法是顺序执行的,在一些场景下,这种执行方式可能会导致测试时间过长,尤其是当测试用例数量较多或者单个测试用例执行时间较长时。并发执行JUnit测试方法的目的就是为了提高测试效率,减少测试时间。本文的范围主要聚焦于在Java中如何实现JUnit测试方法的并发执行,包括相关的原理、实现步骤、实际应用场景以及可能遇到的问题和解决方案。

AI开发架构师

JUNIT多线程测试

JUNIT多线程测试

琳翰

解决java junit单元测试@Test报错的问题

今天小编就为大家分享一篇解决java junit单元测试@Test报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

weixin_38696339
评论 2
收藏 已收藏
分享
返回顶部
jahentao
Java SE 62,620 成员 307,251 内容