我正在准备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));
}
现在,我想知道哪种方法会更好:
答案 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());