gpt4 book ai didi

java - 如何编写测试并发不变量的单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:52 25 4
gpt4 key购买 nike

关于这个问题还有其他问题,但我正在尝试弄清楚如何进行这样的单元测试:

 public class Semaphore extends Lock {
private AtomicInteger semaphore = new AtomicInteger(0);
public synchronized boolean available() {
return semaphore.intValue() == 0;
}
public synchronized void acquire() {
semaphore.incrementAndGet();

}
public synchronized void release() {
semaphore.decrementAndGet();
}
}

这是我朴素的锁定机制(仅用于学习目的)。我将如何测试它的线程安全性?我知道在单元测试并发代码方面没有任何保证,但我什至如何编写单元测试来尝试测试此锁定机制中固有的明显不变量?

最佳答案

我想我会回答我自己的问题,因为我做了一些研究。有一个很棒的框架叫做 MultithreadedTC .它允许您像这样设置测试:

public class SafeSemaphoreTest extends MultithreadedTestCase {

private SafeSemaphore semaphore;
AtomicInteger ai = new AtomicInteger(0);

@Override
public void initialize() {
semaphore = new SafeSemaphore();
}


public void thread1() throws InterruptedException {

assertTick(0);

semaphore.acquire();
waitForTick(2);
assertTick(2);

semaphore.acquire();
assertEquals(semaphore.getValue(), 2);
assertEquals(semaphore.getValue()==3, false);
semaphore.release();
semaphore.release();

}

public void thread2() throws InterruptedException {
waitForTick(1);
assertTick(1);
assertEquals(semaphore.available(), false);
waitForTick(3);
assertTick(3);
assertEquals(semaphore.available(), true);

}

}

waitForTick(int) 调用使当前线程阻塞,直到达到滴答。为了更好地集成 JUnit,甚至进行了一些开发,使其更现代一些: http://janvanbesien.blogspot.com/2009/06/modernizing-multithreadedtc-junit-4.html

关于java - 如何编写测试并发不变量的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087692/

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