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”上进行同步。这是语言的一部分,不需要进行单元测试。