2013-03-07 67 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()内抛出异常。