2017-07-26 175 views
0

我創建了一個Spring Boot應用程序。我有一個同步方法。我想創建JUnit測試來測試此方法是否同步。這裏的類和方法:用於同步方法的JUnit測試

public class FileManager { 


public synchronized void saveTheFile(String theTemperature, String cityName) throws IOException { 
    InputStream streamIn = toInputStream(theTemperature, "UTF-8"); 
    OutputStream streamOut = new FileOutputStream(cityName + ".txt", true); 
    try { 
     IOUtils.copy(streamIn, streamOut); 
    } finally { 

     IOUtils.closeQuietly(streamIn); 
     IOUtils.closeQuietly(streamOut); 
    } 

    } 

} 

我想我需要使用多線程這一點,但我沒有想法甚至如何開始我@Test。請指教!

+0

看起來你不需要在這裏同步任何東西,因爲唯一使用的變量是不可變的參數。除非'toInputStream'處理共享資源? – sp00m

+0

你有沒有試過ConcurrentUnit https://github.com/jhalterman/concurrentunit? –

+0

如果您願意,我可以向您展示我的所有代碼,但是很快我的應用程序會從用戶那裏獲取請求(城市名稱),並將該城市的溫度保存爲具有城市名稱的文件。之後,該應用程序每小時獲得該城市的溫度,並將其保存到同一文件中,直到該應用程序未被殺死。同步的想法已經出現,因爲很少有用戶可以同時請求同一個城市。 – Boris

回答

0

基於你不使用任何可變狀態的事實,我不認爲你需要同步任何東西。

然而,據測試併發性而言,我建議你使用tempus-fugit庫(http://tempusfugitlibrary.org/

使用這個庫,它是超級容易寫關於多線程和併發任何測試:

@RunWith(ConcurrentTestRunner.class) 
public class SomeTest { 
    @Test 
    public void test1() {} 

    @Test 
    public void test2() {} 
} 

根據文檔:

類中的每個測試方法在自己的線程和運行210與該類別中的任何其他測試方法並行。因此,給定測試類的 線程的數量將等於該類中的測試 方法的數量。