6

ile başarısız oluyor RoroGuice 2 için astroboy örnek koduna ve belgelerine bakıyordum ve dürüstçe güldüm. Umarım hepiniz deneyecek şeylerle bana yardımcı olabilirsiniz. Buradaki amaç, modülün yüklenmesini ve IoC'nin çalıştığından/kablolandığından emin olmak için test etmektir.RoboGuice.newDefaultRoboModule() ile test ve bir şey denemeye çalışmak, Roboguice 2.0b3 ve Robolectric

Onların örneğe benzer bir test var: http://code.google.com/p/roboguice/source/browse/astroboy/src/test/java/org/roboguice/astroboy/controller/Astroboy2Test.java?name=roboguice-2.0b3&r=ba37ef680410c64f7f1fe90f5b7b482958d276b5

Mine iki şekilde farklı ... Benim modül sözdizimi ile aynı olan bir kütüphane sınıfı içinde:

public class MyTestModule extends AbstractModule { 
     @Override 
     protected void configure() { 
      bind(Vibrator.class).toInstance(vibratorMock); 
     } 
} 

Ben de değer klasörüne testi proje uygulaması projesini başvuran

<resources> 
    <string-array name=roboguice_modules> 
     <item>com.yourdomain.MyTestModule</item> 
    </string-array> 
<resources> 

kütüphane sınıfında roboguice.xml var, yüklenebileceğini Kütüphane projesine referans ve ihracat yapar. o kadar benziyor Test projede

: Kurulum sırasında

@RunWith(RobolectricTestRunner.class) 
public class MyTest { 

    @Before 
    public void setup() { 
    // Override the default RoboGuice module 
    RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, Modules.override(RoboGuice.newDefaultRoboModule(Robolectric.application)).with(new MyTestModule())); 
} 

null istisna çeşit her zaman hatalar. Bunu, özellikle de yeniDefaultRoboModule yöntemiyle çözdüm. Robolectric.application'ın boş olmadığını biliyorum ve yeni MyTestModule'ın da boş olmadığını biliyorum. Hata ayıklayıcıya basarken, MyTestModule.binder öğesinin boş olduğunu buldum, bu yüzden bir sorun olup olmadığını bilmiyorum.

hata yığın izleme:

java.lang.NoClassDefFoundError: javax/inject/Provider 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(Unknown Source) 
at java.lang.ClassLoader.defineClass(Unknown Source) 
at java.lang.ClassLoader.defineClass(Unknown Source) 
at javassist.Loader.findClass(Loader.java:379) 
at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(RobolectricClassLoader.java:72) 
at javassist.Loader.loadClass(Loader.java:311) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(RobolectricClassLoader.java:49) 
at roboguice.RoboGuice.newDefaultRoboModule(RoboGuice.java:144) 
at test.yourdomain.MyTest.setup(MyTest.java:45) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
at com.xtremelabs.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:284) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.ClassNotFoundException: javax.inject.Provider 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at javassist.Loader.delegateToParent(Loader.java:428) 
at javassist.Loader.loadClassByDelegation(Loader.java:406) 
at javassist.Loader.loadClass(Loader.java:308) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(RobolectricClassLoader.java:49) 
... 36 more 

Başka nereye bakmalıyım? Tüm bunların test yoluyla nasıl bağlandığını hissediyorum. Kelly

+0

Yani mesele bir guice 3.0 sınıftır Sağlayıcısı enjeksiyonu ile yaşamaktadır. Bu bir sağlayıcıyı enjekte etmem gerektiği anlamına mı geliyor? Roboguice'in bütün bu şeylerle ilgili olduğunu sanıyordum. RoboGuice 2 ve Birim Testi ile ne yapıyorsunuz? – KellyTheDev

+0

Küçük güncelleme. üzgün: Ben hiç roboguice 2 çalışma elde edemedim. Ve bir çok geri dönüşün ardından, roboguice 1.1.2'yi ve roboletrik kullanmamaya geçtim. Keşke bu cephede daha fazla destek olurdu, ama en azından birim testleri şimdi çalışıyor. Geriye baktığımda ve şimdi ne yapmak istediğimi tahmin edersem, test zamanını uygulamaya enjekte etmem gerektiğini tahmin ediyorum, ama sadece bilmiyorum. Birisi fikirleri varsa, yukarıdakilerin nasıl kullanılacağını bilmek isterim. Birisi benim roboguice 1.1.2 ve android için yaptıklarımı paylaşmamı isterse ben de çok mutluyum. Bana özel mesaj at. – KellyTheDev

+0

Hiç roboguice tarafından sağlanan örnek uygulamaya ve nasıl kurulduğuna baktınız. Onun hepsi var .. –

cevap

9

javax.inject.jar 'i guog 3.0 zip sayfamdan roboguice 2.0 kurulumuna eklemem gerekiyor.

https://github.com/google/guice/wiki/Guice30

+1

oooooh! Önerin için teşekkürler. Bunu deneyeceğim ve bilmene izin vereceğim. Hepsi bu ise, o zaman [bu] toplam awessomeness @Soulreaper. – KellyTheDev

+1

Son olarak, bunu gözden geçirip test edebildim. Tekrar teşekkürler @Moritz! Öneri çok güzel oldu. (Üzgünüm, bana bu kadar geri dönmek için bu kadar uzun sürdü) – KellyTheDev

+1

Bu gerçekten uzun sürdü ** g ** – Moritz

0

Roboguice proje seyir için

sayesinde örnek uygulamasında bir robolectric testi vardır. Kontrol et in the source. Aynı yaklaşımı kullanıyorum ve benim için gayet iyi çalışıyor.

Yakında Roboguice’in 2.x’ine yükseltmeyi kesinlikle tavsiye ederim. En son sürümle birlikte ..

İlgili konular