gpt4 book ai didi

java - 使用 JUnit 在多线程环境中测试方法行为?

转载 作者:行者123 更新时间:2023-11-29 03:30:24 29 4
gpt4 key购买 nike

对于给定的方法,我想编写测试用例以查看它在多个线程同时运行时的行为。可能听起来很愚蠢,但只是想知道是否有可能创造任何这样的场景?

最佳答案

最近我在一些代码中是这样实现的:

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import static org.junit.Assert.*;
public class UtilTest
{
private final static int TEST_THREAD_COUNT = 10;
private volatile int threadsRun = 0;
private volatile List<String> nonUniqueIds = new ArrayList<>();

@Test
public void testUniqueIdGeneration()
{
final ExecutorService pool = Executors.newFixedThreadPool(TEST_THREAD_COUNT);
Runnable r = new Runnable()
{
@Override
public void run()
{
List<String> doneIds = new ArrayList<>();
for (int i = 1; i <= 100; i++)
{
String id = Util.generateId();
if (doneIds.contains(id))
{
nonUniqueIds.add(id);
break;
}
doneIds.add(id);
}
threadsRun++;
if (threadsRun >= TEST_THREAD_COUNT)
pool.shutdown();
}
};

for (int i = 0; i < TEST_THREAD_COUNT; i++)
{
pool.submit(r);
}
while (! pool.isShutdown())
{
//stay alive
}

if (nonUniqueIds.isEmpty() )
return;

for (String id: nonUniqueIds)
{
System.out.println("Non unique id: " + id);
}
assertTrue("Non unique ids found", false);
}
}

关于java - 使用 JUnit 在多线程环境中测试方法行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580896/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com