2017-07-26 16 views
0

私はSpring Bootアプリケーションを作成しました。私はそこに1つの同期メソッドを持っています。このメソッドが同期されているかどうかをテストする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() {} 
} 

ドキュメントによると:

クラス内の各テストメソッドは、独自のスレッド上とで実行されますそのクラス内の他のテストメソッドと並行して実行する。したがって、与えられたテストクラスに対する スレッドの数は、そのクラス内のテスト メソッドの数に等しくなります。

関連する問題