Java 单元测试同步

Java 单元测试同步,java,unit-testing,junit,synchronization,Java,Unit Testing,Junit,Synchronization,考虑以下方法: /** * 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

考虑以下方法:

/**
 * 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;
   }
}

此方法是涉及
消息的一组方法的一部分,因此我想编写一个测试,检查此方法是否在
消息上同步。有人知道我将如何做到这一点吗?

我认为这超出了单元测试的范围,因为同步的整个要点是在两段遥远的代码之间提供某种类型的连接


您可以测试它在
消息
为null和不为null时的行为方式,这将为您提供完整的覆盖范围。它不会说明您的同步在语义上是否正确。

如果您真的想对其进行单元测试,那么将
消息
公开给测试代码,在一个线程中获取它的锁,并检查您是否无法从另一个线程获得它(超时防止死锁)。正如@biziclop所注意到的,您不应该对此进行测试。您可以测量吞吐量和响应性,但测试某个特定的内在锁太详细了。

因此,在这种情况下,这实际上是一个简单的方法,然后呢?@Michael非常详细。单元测试有其局限性,这是其中之一。证明同步方案的正确性并非不可能,但超出了单元测试的范围。代码“synchronized(messages)”导致在变量“messages”上进行同步。这是语言的一部分,不需要进行单元测试。