2010-05-21 24 views
35

Birlikte bir Java sınıfı bir JUnit Testini çalıştırmak çalışılıyor:Geçiş komut satırı argümanları programlı yürütülüyor

JUnitCore core = new JUnitCore(); 
    core.addListener(new RunListener()); 
    core.run(classToRun); 

Sorun benim JUnit test şu anda içinde kodlanma bir veritabanı bağlantısı gerektirir JUnit kendini test eder.

Aradığım şey, JUnit sınamasını programlı olarak (yukarıda) çalıştırmanın bir yolu, ancak JUnit sınıfında kodlanmış değil, sınamayı çalıştıran Java Sınıfımda oluşturduğum bir veritabanı bağlantısını iletmenin bir yoludur.

Temelde Sonra classToRun içinde

JUnitCore core = new JUnitCore(); 
    core.addListener(new RunListener()); 
    core.addParameters(java.sql.Connection); 
    core.run(classToRun); 

gibi bir şey:

@Test 
Public void Test1(Connection dbConnection){ 
    Statement st = dbConnection.createStatement(); 
    ResultSet rs = st.executeQuery("select total from dual"); 
    rs.next(); 
    String myTotal = rs.getString("TOTAL"); 
    //btw my tests are selenium testcases:) 
    selenium.isTextPresent(myTotal); 
} 

Ben @Parameters hakkında biliyorum, ama bu aynı test yaparken daha olduğu gibi burada uygulanabilir görünmemektedir farklı değerler ile birden çok kez dava. Tüm sınama durumlarım, bir yapılandırma dosyasından java istemcime aktardığım bir veri tabanı bağlantısını, bu sınama durumlarını (yapılandırma dosyasında da iletilen) çalıştıracak şekilde paylaşmasını istiyorum.

Bu mümkün mü?

P.S. Anlıyorum ki, bu işleri yapmak için garip bir yol gibi görünüyor.

cevap

41

Bunu başarmak için java sistem özelliklerini kullanabilirsiniz.

Basitçe junit komut satırında -Dconnectionstring=foobar gerekenleri geçmesi veya sistem özelliklerini System.setProperty(String name, String value) ve System.getProperty(String name) ile, programlı bu ayarlamak için java API kullanmak. senin testlerde

, sen @Before veya @BeforeClass (bu durumda sınıf üyelerini kullanabilirsiniz) veya bir kez her test için bir kere kurulumu çalıştırmak için istemenize bekleyen bu mülke dayalı ortak nesneleri kurmak için kullanabileceğiniz Her süit için (ve sonra statik üyeleri kullanın).

Bu davranışı, tüm test durumlarınızın genişlettiği bir soyut sınıf kullanarak bile belirtebilirsiniz.

+0

System.set/getProperty() yöntemleri, değişkenleri çalışan test sınıflarına geçirmek için yeterliydi. Teşekkür ederim! –

+0

Bağımsız değişkenleri bu şekilde iletirseniz -Dconnectionstring = foobar. Çalışma zamanında bunları nasıl çıkarabilirim? –

+1

@TomKoptel, "String value = System.getProperty (" connectionstring "); – tonio

İlgili konular