java单元测试同步
考虑以下方法:
/**
* Set whether messages are printed to System.out. *
* @param printOutput True to print, false for silent logging
*/
public void setPrintOutput(boolean printOutput) {
// Synchronize to messages because this field is used when a message is received
synchronized (messages) {
this.printOutput = printOutput;
}
}
此方法是涉及messages
的一组方法的一部分,因此我想编写一个测试,检查此方法是否在messages
上同步。有人知道我会怎么做吗
# 1 楼答案
我认为这超出了单元测试的范围,因为同步的整个要点是在两段遥远的代码之间提供某种类型的连接
您可以使用
messages
为null和非null来测试它的行为方式,这将为您提供完整的覆盖范围。它不会说明同步在语义上是否正确# 2 楼答案
如果您真的想对它进行单元测试,那么将
message
暴露给测试代码,在一个线程中获取它的锁,并检查您是否无法从另一个线程获得它(超时防止死锁)。正如@biziclop所注意到的,您不应该对此进行测试。您可以测量吞吐量和响应性,但测试是否使用了某些特定的内在锁太详细了