2013-03-07 58 views
1

我試圖測試功能這樣的測試:遊戲框架:用假的應用

@Test 
    public void testAddTask() { 
     FakeApplication fakeApplication = fakeApplication(inMemoryDatabase()); 
     start(fakeApplication); 
     Task task=new Task(); 
     task.title="test Task"; 
     task.save(); 
     assertThat(Task.find.where().ilike("title", "task")).isNull(); 
     stop(fakeApplication); 

    } 

其成功這是不對的 而

@Test 
    public void testAddTask(){ 
     running(fakeApplication(inMemoryDatabase()), new Runnable() { 
      public void run() { 
       Task task=new Task(); 
       task.title="test Task"; 
       task.save(); 
       assertThat(Task.find.where().ilike("title", "task")).isNull(); 
      } 
     }); 
    } 

失敗,這就是我的期望。

不應startfakeapplication行爲一樣`運行(fakeApplication()?

回答

2

是的,它does the same

/** 
* Executes a block of code in a running application. 
*/ 
public static synchronized void running(FakeApplication fakeApplication, final Runnable block) { 
    try { 
     start(fakeApplication); 
     block.run(); 
    } finally { 
     stop(fakeApplication); 
    } 
} 

差異的原因可能運行一些其他的測試後未進行清洗。running()try..finally建議將stop(fakeApplication);納入註解方法@After(並在@Before中初始化fakeApplication

我不喜歡running()輔助方法,因爲它不允許在run()內拋出異常。