2016-04-02 15 views
0

Son sınıf olan bir yardımcı program sınıfım var. Orada LOGGER enjekte etmek için enjeksiyon kullandım.Statik özel son değişkeni Powermock kullanarak mı kullanıyorsunuz?

public final class Utilities { 

    @Inject 
    private static Logger.ALogger LOGGER; 

    private Utilities() { 
     //this is the default constructor. so there is no implementation 
    } 

    public static String convertToURl(string input){ 
     try{ 
      //do some job 
      }catch(IllegalArgumentException ex){ 
      LOGGER.error("Invalid Format", ex); 
      } 
    } 

} 

Ben aksi takdirde boş işaretçi özel durum oluşturur sahte KAYIT bölümüne sahip bu yöntem için birim test yazarken. Bu sınıfın örneğini oluşturmadan bu LOGGER ile nasıl dalga geçebilirim? Değişkeni beyazlatmayı denedim. Ama sadece örneklerle çalışır?

+0

mu [statik alana enjeksiyon] (http://stackoverflow.com/questions/19225179/is-it-possible-to-inject-a-cdi-bean-into-a-static-variable -in-java-ee-6) sizin için çalışıyor? Varsayılan olarak – fracz

+0

yönergesi, tasarım gereği statik enjeksiyona izin vermez. Ama biz bunu isteyebiliriz (http://stackoverflow.com/questions/28513147/guice-injection-in-static-variable) – Burusothman

+0

Bunu bilmiyordum. Bunu ben de kullanmadim, ama statik alan enjekte edebilirse, belki de birim testinde logger alayi enjekte etmek için kullanabilir miyim? – fracz

cevap

1

Bu kod düzgün çalışıyor. Statik alan ayarlamak için bir dersi org.powermock.reflect.Whitebox.setInternalState'a iletmeniz gerekir. Lütfen, PowerMock'in sınıfını, org.powermock.reflect paketinden kullandığınızdan emin olun, çünkü Mockito'nun aynı isimli bir sınıfı vardır.

@RunWith(PowerMockRunner.class) 
public class UtilitiesTest { 

    @Mock 
    private Logger.ALogger aLogger; 

    @Before 
    public void setUp() throws Exception { 

     MockitoAnnotations.initMocks(this); // for case them used another runner 
     Whitebox.setInternalState(CcpProcessorUtilities.class, "LOGGER", aLogger); 
    } 

    @Test 
    public void testLogger() throws Exception { 
     Utilities.convertToURl(""); 
     verify(aLogger).error(eq("Invalid Format"), any(IllegalArgumentException.class)); 
    } 
} 
+0

çalışır. şerefe! – Burusothman

+0

Güncellenmesi gerekiyor. Whitebox artık kullanılmamaktadır. – user447607

+0

@ user447607 “artık kullanılmıyor” ile ne demek istediniz? Sınıf hala PowerMock'te mevcut ve korunacak. Onu kaldırma planlarım yok. Belki de bunu yapmanın başka bir yolu var demektir! –

İlgili konular