Guice - 测试注入器的正确行为 - getClass()vs instanceof

时间:2011-12-14 13:59:49

标签: junit guice

我正在准备Guice的演示文稿,我计划通过执行单元测试来演示Guice的(正确)行为。在下面的测试用例中,我想确保注入正确的类型

@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检查类型(和子类型)

2 个答案:

答案 0 :(得分:1)

我没有关于Guice的专家,但是在Spring DI中,你可以注入实例,这些实例不是你期望的类的实例。例如,在您的示例中,如果House不是类,而是接口,那么在某些情况下弹出(例如,如果您正在使用事务)会为您提供代理,而不是类的实例实现接口。您唯一的保证是它将实现正确的接口。所以我会用:

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

答案 1 :(得分:1)

而不是像Matthew所指出的那样容易出错的类,为什么没有正确的类实现一个方法,当被调用时,它返回你期望的结果?

在这种情况下,也许:

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

...

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