2013-04-02 28 views
10

みんな!あなたに新しい質問があります。別のキャッシュマネージャを使用してキャッシュにデータを追加していますが、その問題に直面しています。私はジュニットとスプリングを使ってやっています。テストを実行すると、テストメソッドはランダムに実行されますが、それらを順番に実行する必要があります。どうやってするの??ここではいくつかのコードと証明コンソール出力は次のようになります。junitテストの実行方法を順番に並べる

サービスクラス:ここ

@Service("HelloCache") 
public class CacheServiceImpl implements CacheInterface { 
    @Autowired 
    @Qualifier("memcachedClient") 
    private MemcachedClient mBean; 

    public void Add(String key, Object object) { 
     mBean.set(key, 12, object); 
    } 

    public void Get(String key) { 
     mBean.get(key); 
    } 

    public void Delete(String key) { 
     mBean.delete(key); 
    }  
} 

はテストです:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "file:src/main/java/spring.xml") 
public class UsingMemcachedTest extends TestCase { 
    @Autowired 
    @Qualifier("HelloCache") 
    private CacheInterface emcached; 
    private byte[][] i = new byte[2500][3000]; 
    private String key = "j"; 
    @Test 
    public void testAddBulkObjects() { 
     System.out.println(""); 
     System.out.println("This is async BULK adding test"); 
     long time = System.currentTimeMillis(); 
     for (int k=1; k<=1000; k++) { 
      emcached.Add(key+k, i); 
     } 
     long time2 = System.currentTimeMillis(); 
     long timeE=time2-time; 
     System.out.println("Vremya add BULK objects: " + timeE); 
     System.out.println(""); 
    } 

    @Test 
    public void testGetBulkObjects() { 
     System.out.println(""); 
     System.out.println("This is getting BULK objects test"); 
     long time = System.currentTimeMillis(); 
     for (int k=1; k<=1000; k++) { 
      emcached.Get(key+k); 
     } 
     long time2 = System.currentTimeMillis(); 
     long timeE=time2-time; 
     System.out.println("Vremya Get object: " + timeE); 
     System.out.println(""); 
    } 

    @Test 
    public void testDeleteBulkObjects() { 
     System.out.println(""); 
     System.out.println("This is deleting BULK objects test"); 
     long time = System.currentTimeMillis(); 
     for (int k=1; k<=1000; k++) { 
      emcached.Delete(key+k); 
     } 
     long time2 = System.currentTimeMillis(); 
     long timeE=time2-time; 
     System.out.println("Vremya delete object: " + timeE); 
     System.out.println(""); 
    } 

そして出力:

This is deleting BULK objects test 
Vremya delete object: 137 


This is getting BULK objects test 
Vremya Get object: 703 


This is async BULK adding test 
Vremya add BULK objects: 87681 

、助けてください!! =)

+3

なぜそれらを順番に実行しますか?テストはどんな順序でも実行できるはずです。あなたはいつも古風なやり方でTestSuiteを作ることができます。 –

+0

私はキャッシュにいくつかのデータを追加してから、それをキャッシュから取得してから削除するので、それを行う必要があります。それが理由です。 – PAcan

答えて

8

JUnitは、テストの実行順序については約束していません。この順序は、テストが実行される環境およびコンテキストによって異なります。

この理由(およびその他の理由から)では、テストの動作に影響を及ぼすための注文のための非常に悪いテスト設計とみなされます。 @Beforeを使用すると、作業にきれいなスレートを与えてから、そのテストの一環として特定のテストの設定を行うことができます。

次の質問のための受け入れ答えはいくつかの有用なリソースへの良い説明とリンクを提供します:How to run test methods in specific order in JUnit4?

45

を制御することができますいくつかのクールなものを追加しましたメソッド名で注釈や順序付けを使用して実行順序:

import org.junit.Test; 
import org.junit.FixMethodOrder; 
import org.junit.runners.MethodSorters; 

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class MyTest { 

    @Test 
    public void test1Create() { 
     System.out.println("first"); 
    } 

    @Test 
    public void test2Update() { 
     System.out.println("second"); 
    } 
} 

See JUnit 4.11 Release Notes

+0

偉大な、ありがとう! – Hartmut

関連する問題