2013-09-02 22 views
5

TestRig sınıfını çalıştırmak için antlr4 maven fişini nasıl kullanabileceğimi anlamak için biraz uğraşıyorum?Antlr4 "Test Donanımı" ve maven

ben bulmak mümkün olmuştur tek dokümandır mvn antlr4:help -Ddetail=true çıkışında olsa okumuştum ama bu TestRig nasıl kullanılacağını bahsetmiyor. Öyleyse, test donanımını maven ile birlikte kullanmanın önerilen yolu nedir? grun alias yöntemini kullanarak burada çok şık görünmüyor.

GÜNCELLEME

- Akıl Yürütme

Merhaba :)

Sağ, beni yanlış anlamayın ama maven plugin bu işlevselliği istemem Gerçekten neden anlamıyorum? Ve neden ruh amacının dilbilgisini derlemesi gerektiğini anlamıyorum?

Şu anda, Maven ile bir yapıyı sürdürürsem ve antlr4-maven-plugin'u kullanırsam, hem eklenti hem de antlr 4.1'i maven havuzumda kuracaktır. Bu zaten oradayken, neden maven bunu halledebilirse sınıf yoluma şeyler eklemeye ve takma adlar oluşturmaya başlayayım? Yani, maven gerçekten bunun için. Eğer bir antlr4:TestRig hedefim olsaydı, o zaman tek yapacağım bunu kullanmaktı. Sınıf yolunu elle tutmaya veya bash takma adları oluşturmaya gerek yoktur. Sadece çalışırdı.

Sınıf yolumdaki yerel maven havuzumdaki sabit kodlama öğelerini ve bash takma adlarını korumak çok daha zarif olabilir. Veya alternatif olarak, başına iki yüklemeyi koruyun. Kullanmak istediğim antlr versiyonu (bir tanesi bana göre, sadece TestRig'i kullanmak, diğeri ise her şey için maven tarafından korunur). Ben antlr farklı bir sürümünü kullanmak istiyorsa

Ayrıca, o zaman ben Neden mü Maven eklentisi maven basitçe Benim için bu kadar idare edecek :)

cevap

1

, sınıf yolunu ve benim takma adları güncellemeniz gerekir olmaz TestRig sınıfını çalıştırın? Maven eklentisinin işi, .g4 dilbilgisi dosyalarını .java kaynak dosyalarına uygun paket konumlarına dönüştürüyor ve bu oluşturulan dosyaların derlenmesini sağlıyor. TestRig, bunun herhangi bir kısmı için kullanılmaz.

Düzenleme: Birçok uygulamada ANTLR'yi yıllardır kullanıyorum. O zamanlar sistem sınıf yolumu hiçbir zaman güncellemedim, ne de komut satırından ANTLR/gunit/TestRig çalıştırdım veya bunun için takma adlar oluşturdum. Bunu yapmak, otomatik test için yararlı değildir ve kaçınılmaz olarak kullanıcılara açıkladığınız problemlere yol açar. TestRig'in Maven eklentisinde özel desteğe ihtiyaç duyduğu düşüncesi de aklımdan geçmedi, çünkü daha iyi çözümler zaten var.

Bazı alternatifler

  1. Sen güzelliğinde eklenti kullanmak ve doğrudan gramer işlemleri gerçekleştiren bir JUnit test yazabilir (bir lexer/ayrıştırıcı oluşturmak bazı giriş ayrıştırmak ve belki de üzerinde inspect() çağrı Ortaya çıkan ayrıştırma ağacı.
  2. Sen güzelliğinde eklenti kullanmak ve açıkça doğru argümanlarla TestRig.main(String[]) çağıran bir JUnit test yazın.
  3. Sen TestRig çalıştırmak için yeni bir hedef eklemek için ANTLR 4 Maven eklentisi değiştirebilir ve edebilirsiniz alt Gelecekteki bir sürümde yer alması için projeye bir çekme talebinin kaldırılması (ANTLR 4'ü kullanarak bir projenin uzun vadeli başarılı bir şekilde test edilmesine daha uygun 2 alternatif olduğu için çok zorlayıcı bir dava yapmanız gerekecektir).
+0

bazı akıl ile sorumu güncellenen :) – JustDanyul

+0

@JustDanyul teşekkür ederiz, bu ne soran artık çok daha açık. Cevabımı güncelledim. –

+0

Tekrar bana ulaştığınız için teşekkürler. Ben zaten var olan birim testleri ile birlikte oldukça güzel oynayacak seçenek # 2 düşünmemiştim. Şerefe. – JustDanyul

2

Dilbilgisi hata ayıklama için TestRig-gui seçeneğini kullanmak istedim, benzer bir soru vardı. GUI'yi antlr4-maven-plugin aracılığıyla çalıştırmak için bir yol bulamadım, ancak tatmin edici bir CLASSPATH oluşturmayı başardım. Anahtar, target/classes'u dahil etmekti.

# Assuming your project is in $PROJECT .. 
CLASSPATH=".:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes" 
alias grun='java org.antlr.v4.runtime.misc.TestRig' 
mvn -q compile 
grun MyGrammer startingRule -gui < test_input 

Sözdizim ağacının güzel bir GUI görünümü oluşturmalıdır.

Aradığınız yanıt bu olmayabilir, ancak umarım başka birine yardımcı olur.

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE> 
-gui <INPUT_FILE>" 

Eğer src/main/antlr4/com/test içinde MyGrammar.g4 var Yani eğer: (. Örn ben, unutmak yarın)

2

Bu benim Maven ile TestRig çağırmak nasıl startRule bir başlangıç ​​kuralla/ayrıştırıcı:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="com.test.parser.MyGrammar startRule 
-gui <INPUT_FILE>"