2011-12-14 61 views
1

我正在準備Guice的演示文稿,我計劃通過執行單元測試演示Guice的(正確)行爲。在下面的測試情況下,我想,以確保正確類型的注射Guice - 測試噴射器的正確行爲 - getClass()vs instanceof

@Test 
public void shouldInjectCorrectDependencies() { 
    Injector injector = Guice.createInjector(new ModuleImpl()); 
    House house = injector.getInstance(House.class); 

    Assert.assertTrue(house.door().getClass() == (WoodenDoor.class)); 
} 

現在,我不知道哪種方法會更好:

  • 使用的getClass()來檢查的具體類
  • 使用instanceof來檢查一個類型(和子類型)

回答

1

我對吉斯不是專家,但在春季DI,你可以注入情況下,這是不是你的類的實例期待。例如,在你的例子中,如果House不是一個類,而是一個接口,那麼在某些情況下(例如,如果你正在使用一個事務)彈出給你一個代理服務器,而不是一個實現接口的類的實例。您唯一的保證是它將實現正確的界面。所以,我會用:

Assert.assertTrue(house.door().isAssignableFrom(WoodenDoor.class)); 
+1

我認爲這將需要``WoodenDoor.class.isAssignableFrom或更好的`WoodenDoor.class.isInstance((house.door()的getClass())。 house.door())`...但由於你知道你在編譯時感興趣的類型,`house.door()instanceof WoodenDoor`對我來說似乎最好。 – ColinD 2011-12-14 16:54:26

1

而是推理類,由馬修指出,這是很容易出錯的,爲什麼不能有正確的類實現一個方法,該方法被調用時,返回你所期望的結果?

在這種情況下,也許:

public class Door { 
    public String getDescription() { return "Wood"; } 
} 

... 

Injector injector = Guice.createInjector(new ModuleImpl()); 
Assert.assertEquals("Wood", injector.getInstance(House.class).door().getDescription());