2011-12-14 30 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());