测试类无法识别外部类静态变量,如何无需实例化访问?
解决测试类访问静态Product变量的问题
你遇到的问题是因为虽然ProductFixture里的变量是静态的,但测试类没有正确引用它们。不用实例化ProductFixture的话,有两种最直接的解决办法:
1. 使用静态导入(Static Import)
这是最简洁的方式,直接在测试类的导入部分添加静态导入语句,这样就能在代码里直接使用door、window这些变量名,不用加类前缀。
在你的ShipmentTest类顶部添加:
// 导入所有静态成员,适合用多个变量的情况 import static com.monotonic.Shipment.project.ProductFixture.*; // 或者只导入你需要的特定变量,更精确 // import static com.monotonic.Shipment.project.ProductFixture.door; // import static com.monotonic.Shipment.project.ProductFixture.window;
修改后的测试方法就可以正常运行了:
@Test public void shouldAddItems() throws Exception { shipment.add(door); shipment.add(window); assertThat(shipment, contains(door, window)); }
2. 通过类名直接访问静态变量
如果不想用静态导入,也可以直接在代码里通过ProductFixture类名来调用静态变量,这样也不需要实例化类:
@Test public void shouldAddItems() throws Exception { shipment.add(ProductFixture.door); shipment.add(ProductFixture.window); assertThat(shipment, contains(ProductFixture.door, ProductFixture.window)); }
额外检查点
确保这两个前提没问题:
ProductFixture类本身是public修饰的(如果测试类和它不在同一个包下,必须是public才能访问)- 静态变量
door、window确实是public static修饰的(你给出的代码里已经满足这一点)
内容的提问来源于stack exchange,提问作者gs650x
相关产品推荐
相关产品推荐

