Junit Unit Testleri için JVM parametreleri nasıl ayarlanır?


96

Çalışmak için büyük miktarda yığın alanı gerektiren bazı Junit birim testlerim var - yani 1G. (Yalnızca yeterli yığın alanıyla çalışacak ve dahili olarak Win 7 64 bit makinelerde çalıştırılacak bir web başlatıcı uygulaması için bellek yoğun işlevselliği test ederler - bu nedenle testleri yeniden tasarlamak pratik bir öneri değildir.)

Intellij IDEA'da geliştiriyorum, bu yüzden test sınıfı için JVM parametrelerini (örn. -Xmx1024M) ayarlayabileceğimi biliyorum. Ancak, bu yalnızca tüm test sınıfını çalıştırmak içindir - bireysel bir test yapmak istersem, o test yöntemi için çalıştırma yapılandırmalarını yeniden oluşturmam gerekir.

Ayrıca, bunlar IDE ve kutuya özeldir - bu nedenle, kutuları değiştirirsem (birden fazla makinede geliştirirsem) veya meslektaşlarımdan biri testleri çalıştırmaya çalışırsa, bu ayarlar aktarılmaz. (Ayrıca Eclipse ve NetBeans gibi diğer IDE'ler meslektaşlarım tarafından kullanılıyor.) FWIW, kaynak kodu kontrolü için mercurial kullanıyoruz.

Derleme döngüsü için Maven kullanıyoruz, bu yüzden bunun için JVM parametrelerini nasıl belirleyeceğimi biliyorum.

Yani: - Tüm test sınıfı ve bireysel test yöntemleri için geçerli olacak JVM parametrelerini belirlemenin bir yolunu arıyorum; ve - Bu spesifikasyonu herhangi bir makinedeki IDE'ler arasında paylaşmak istiyorum (kodu depodan aldım).


Mümkün olduğundan şüpheliyim. Makineler arasında, belirli bir IDE için uygun olmalıdır. Ancak IDE'lerde nasıl olduğunu anlamıyorum.
JB Nizet

@JBNizet - Belirli bir IDE için (Intellij IDEA olması koşuluyla) makinelerin karşısına çıkmaktan mutluluk duyarım.
amaidment

Yanıtlar:


48

IntelliJ'de her çalıştırma yapılandırması için varsayılan ayarları belirleyebilirsiniz. In Run / ayıklama yapılandırma iletişim (eğer test başına yapılandırmak yığınına kullandığınız) tıklayın Varsayılanları ve JUnit . Bu ayarlar, her yeni JUnit test yapılandırmasına otomatik olarak uygulanacaktır. Sanırım Eclipse için de benzer bir ayar var.

Ancak, bu tür ayarları (en azından IntelliJ'de) ortamlar arasında aktarmak için basit bir seçenek yoktur. IntelliJ proje dosyalarını deponuza işleyebilirsiniz: işe yarayabilir, ancak ben tavsiye etmiyorum.

Bunları nasıl ayarlayacağınızı biliyorsunuz maven-surefire-plugin. İyi. Bu en taşınabilir yoldur (bir örnek için Ptomli'nin cevabına bakın).

Geri kalanı için - JUnit test durumlarının bağımsız bir program değil, sadece bir grup Java sınıfı olduğunu unutmamalısınız. Koşucuya bağlıdır ( maven-surefire-pluginbu seçenekleri ayarlamak için bağımsız bir JUnit koşucusu, IDE'niz olsun . Bununla birlikte, bunları ayarlamanın "taşınabilir" bir yolu olmadığı, böylece bellek ayarlarının koşucuya bakılmaksızın uygulanacağı söyleniyor.

Size bir örnek vermek gerekirse: Xmxbir servlet geliştirirken parametre tanımlayamazsınız - bunu tanımlamak konteynere bağlıdır. Diyemezsiniz: "bu sunucu uygulaması her zaman birlikte çalıştırılmalıdır Xmx=1G.


Çalıştır / Hata Ayıklama yapılandırması nerede? Testi çalıştırdığımda bunu tercihlerde veya içerik menüsünde görmüyorum?
Dean Hiller

2
Bunun mevcut JUnit çalıştırma yapılandırmalarını DEĞİŞTİRMEYECEĞİNİ, sadece varsayılanları değiştirdikten sonra oluşturulanları unutmayın. Mevcut olanları manuel olarak değiştirmelisiniz.
MikeFHay

79

Maven'de surefire eklentisini yapılandırabilirsiniz

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xmx256M</argLine>
    </configuration>
</plugin>

Derlemeler için Maven kullanıyorsanız, bu yapılandırma kaynak ağacında taşınacak ve testler gerçekleştirildiğinde uygulanacaktır. Bkz Maven Surefire Eklenti belgelerine.


1
@ptomli - "Elbette ..." ile başlayan yorumlara her zaman güvenmem. Intellij maven entegrasyonu, maven derleme döngüsünde görevleri çalıştırırken pom eklenti yapılandırmasını kullanır. IDE'de birim testlerini çalıştırmak ayrı bir işlemdir ve varsayılan olarak derleme süreci hakkında bilgi sahibi değildir. Bildiğim kadarıyla, bunları birbirine bağlamanın bir yolu yok - aksini söylemekten mutlu olsam da. Bu, bildiğiniz / yaptığınız bir şey mi - bu durumda nasıl yapılacağını paylaşabilir misiniz?
amaidment

1
Intellij'de bunun mümkün olduğundan emin değilim. TBH, öyle olsa bile, bu yaklaşımı kullanmak istemezdim, çünkü olasılıkla, eğer IDE'de birim testlerini çalıştırıyorsam, yapamadığım IDE hata ayıklayıcısından yararlanmak istiyorum. bir mvn testi çalıştırarak.
amaidment

5
Aslında, IntelliJ'in Maven entegrasyonu , bağımsız birim testlerini yürütürken Maven Surefire yapılandırmasını kullanır. Yukarıdaki Maven yapılandırmasının kullanılması, -Xmx256Mbirim testlerinizi doğrudan IntelliJ'den yürütürken Java komut satırına geçilmesine neden olacaktır. Bu sadece kafamı karıştırdı :-(
Kkkev

1
Bilginize: Netbeans, testlerini yapmak için Maven Suefire'ı da kullanıyor
Ferrybig

1
@Kkkev IntelliJ'in Maven entegrasyonu, IntelliJ'de bireysel bir test yürütmekten farklıdır. İlki bir Maven çalıştırma yapılandırması kullanır (ve bu nedenle bağımsız değişkeni okur), ikincisi bir JUnit, TestNG ... yapılandırması kullanır.
andresp


15

Bu destek sorusuna göre https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-

IntelliJ junit test çalıştırması için -Xmx argümanı, ayarlanmışsa maven-surefire-eklentisinden gelecektir.

Bu pom.xml pasajı

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>

IntelliJ 2016.2.4 ile -Xmx1024 bağımsız değişkenini junit test çalıştırmasına geçiriyor gibi görünüyor.


13

Bu ayarları dağıtmanın basit bir yolu olmadığını söyleyen diğerlerine katılıyorum.

Eclipse için: meslektaşlarınızdan aşağıdakileri ayarlamalarını isteyin:

  • Windows Tercihleri ​​/ Java / Yüklü JRE'ler:
  • Uygun JRE / JDK'yı seçin (veya hepsi için yapın)
  • Düzenle
  • Varsayılan sanal makine bağımsız değişkenleri: -Xmx1024m
  • Tamam, tamam.

Bundan sonra tüm testler ile çalışacak -Xmx1024mama ne yazık ki her Eclipse kurulumunda ayarladınız. Belki bu ayarı içeren özel bir Eclipse paketi oluşturabilir ve bunu iş arkadaşlarınıza verebilirsiniz.

Aşağıdaki çalışma süreci de yardımcı olabilir: IDE bir testi çalıştıramazsa, geliştirici Maven'in bu testi çalıştırıp çalıştıramayacağını kontrol etmelidir.

  • Maven çalıştırabilirse , başarısızlığın nedeni genellikle geliştiricinin IDE'sinin ayarlarıdır. Geliştirici bu ayarları kontrol etmelidir.
  • Maven testi de çalıştıramazsa , geliştirici başarısızlığın nedeninin IDE olmadığını bilir, bu nedenle testte hata ayıklamak için IDE'yi kullanabilir.

Projenin maven ile inşa edilmesi gerektiğini söylemek pek yardımcı olmuyor. (Biz sadece maven ile inşa ediyoruz.) Bununla birlikte, sizin önerinizde örtük olarak, testleri yalnızca maven oluşturma döngüsünün bir parçası olarak çalıştırmamız gerektiğidir - IDE'de hata ayıklama için sıklıkla aynı testleri kullanırız. (Bir kez hata
ayıklandıktan

tamam - ama şimdi sadece
Tomasz'ın

2

SystemPropertyVariables'ı kullanabilirsiniz (java.protocol.handler.pkgs, JVM bağımsız değişkeninizin adıdır):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <systemPropertyVariables>
            <java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs>
            <log4j.configuration>log4j-core.properties</log4j.configuration>
        </systemPropertyVariables>
    </configuration>
</plugin>

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html


1

Java.library.path JVM parametresiyle sınırlı tutulmaya özgü bir alternatif, başka bir yanıtta önerildiği gibi tüm jdk yerine belirli bir kaynak klasör için ayarlanmasına izin verir:

  1. Başlatılacak programın bulunduğu kaynak klasörü seçin (genellikle kaynak / test / java)
  2. o klasörün Özellikler sayfasını açmak için alt enter yazın
  3. sol panelde yerel seçin
  4. Yerel yolu düzenleyin. Yol, mutlak veya çalışma alanına göreceli olabilir, ikincisi değişime daha dayanıklıdır.

SystemProperties one yerine maven argline etiketinin neden tercih edilmesi gerektiğiyle ilgili ayrıntılarla ilgilenenler için, örneğin:

Maven testinde (lwjgl) yerel JNI dosyalarını alın


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.