2017-10-09 124 views
5

@SpringBootApplication başlangıç ​​sınıfımın standart bir modele benzediği bir spring-boot uygulamasına sahibim. Bu yüzden tüm işlevlerim için birçok test oluşturdum ve kapsama alanını görmek için özeti sonarqube'a gönderdim.İlkbahar-önyükleme uygulamasının ana sınıfı nasıl test edilir

Başlangıç ​​sınıfım için Sonarqube bana% 60'lık kapsama sahip olduğumu söyledi. Yani ortalama kapsama beklendiği gibi iyi değil.

enter image description here

Benim Testi sınıfı yalnızca varsayılan biridir.

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = ElectronicGiftcardServiceApplication.class) 
public class ElectronicGiftcardServiceApplicationTests { 

    @Test 
    public void contextLoads() { 
    } 
} 

Peki, ana sınıfımı uygulamamın başlangıç ​​sınıfında nasıl sınayabilirim?

+0

Yalnızca "SpringApplication" sınıfını mockito kullanarak atayın ve ana "yöntem" i çalıştırırken doğru argümanlar ile çağrıldığını doğrulayın. –

cevap

4

Ben aynı hedefe (ana() yöntemini çalıştırır sınav oluyor) vardı bu

@Test 
public void applicationContextLoaded() { 
} 

@Test 
public void applicationContextTest() { 
    mainApp.main(new String[] {}); 
} 
4

gibi bir şey yapabilirsiniz ve ben fark sadece @ fg78nc gibi bir test yöntemi ekleyerek söyledi aslında irade Uygulamayı iki kez "başlat": bir kez bahar önyükleme testi çerçevesiyle, bir kez zarif bulmamadığım mainApp.main(new String[] {})'un açık bir şekilde çağrılması yoluyla.

iki test sınıfları yazma sona: @SpringBootTest açıklama ile bir boş test yöntemi applicationContextLoaded() ana yöntemi çağırır @SpringBootTest (sadece RunWith(SpringRunner.class)) olmadan başka bir. Genel ApplicationStartTest

package example; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
public class ApplicationStartTest { 
    @Test 
    public void applicationStarts() { 
    ExampleApplication.main(new String[] {}); 
    } 
} 

SpringBootApplicationTest

package example; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class SpringBootApplicationTest { 

    @Test 
    public void contextLoads() { 
    } 
} 

, uygulama hala iki kez başladı, ancak şimdi iki test sınıfları olduğundan. Tabii ki, sadece bu iki test metodu ile, bu aşırı gibi görünüyor, ama genellikle @SpringBootTest kurulumunu kullanarak SpringBootApplicationTest sınıfına daha fazla test eklenecektir.