2012-11-29 35 views
0

我是Xtend和單元測試的新手。 我正在測試我的語法,我想寫一個測試它的驗證測試。Xtext:結合測試和驗證

這裏一個簡單的例子:

MyGrammar:

Domainmodel: entities+=Entity* ; 

Entity: 
'ENTITY' name=ID 'END_ENTITY'; 

現在假設我也插入這個驗證規則:

@Check 
public void checkNoJack(Entity e){ 
    if (e.getName().equals("Jack")){ 
     error("This name is not valid.",null); 
    } 
} 

所以,如果我嘗試寫:

ENTITY Jack END_ENTITY 

I會收到一個錯誤。

但是,如果我嘗試這樣的Xtend測試:

@Test 
def void example() throws Exception{ 
    parserHelper.parse("ENTITY Jack END_ENTITY") 
} 

一切都會去的權利。

如何在我的測試中考慮驗證規則?

UPDATE:名稱正確解析:

@Test 
    def void example() throws Exception{ 
     val model = parserHelper.parse("ENTITY John END_ENTITY"); 
     val entity=model.entities.get(0); 
     assertEquals(entity.name, "John"); 
    } 

    @Test 
    def void example2() throws Exception{ 
     val model = parserHelper.parse("ENTITY Jack END_ENTITY"); 
     val entity=model.entities.get(0); 
     assertEquals(entity.name, "Jack"); 
    } 

回答

2

解決了使用ParserHelper和方法:

parse.assertNoError 
0

嘗試加入本次測試以確保名稱正確解析:

@Test 
def void example() throws Exception{ 
    Entity entity = parserHelper.parse("ENTITY John END_ENTITY"); 
    assertEquals(entity.getName(), "John"); 
} 
+0

是的,名稱解析正確(請參閱第一篇文章的更新)。 –