当前位置: 首页 > 知识库问答 >
问题:

当存在来自超类的依赖注入时,我如何设置测试?

微生毅
2023-03-14
abstract class BaseController {
   @Inject Store store; 
}

class MyController extends BaseController {
   private final Validator validator;

   @Inject
   public MyController(Validator validator) {
      this.validator = validator;
   }

   public boolean someMethod() {
      a = store.storingMethod();
      b = validator.validate(a);
      ...
      ...
      return true;
   }
}
@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest() {
   private MyController myController;
   @Mock private Validator validator;

   @Before
   public void before() {
      myController = new MyController(validator);
   }
}

我知道,如果我将storeBaseController移动到MyController,我可以在构造函数中初始化它(就像我对验证器所做的那样)。但是,我希望将存储放在基类中,因为它将被扩展它的其他类使用。

根据我的类的设置方式,如何在测试时注入store

共有1个答案

华凌
2023-03-14

不要使用现场注射。使用构造函数注入。

abstract class BaseController {
    final Store store; 

    BaseController(Store store) {
        this.store = store;
    }
}

class MyController extends BaseController {
   private final Validator validator;

   @Inject
   public MyController(Validator validator, Store store) {
      super(store);
      this.validator = validator;
   }
}

在这个问题上有一些争论,但您的例子清楚地说明了使用字段注入使类更难测试的情况。

属性与构造函数上的Spring@Autowire

 类似资料:
  • 我在android应用程序中使用Dagger2进行DI。我发现我必须为每个使用@inject字段的类编写inject方法。有没有一种方法,我可以只注入父类,这样我就不必对每个子类都调用注入?以活动为例。我有一个,每个活动都从它扩展。是否有一种方法可以在组件中为BaseActivity创建一个inject方法,并在BaseActivity的onCreate中调用inject,然后自动注入子活动中的@

  • 问题内容: 我需要使用spring框架在抽象超类中注入依赖项。 我每次实例化Abstract class B时都需要传递超类依赖关系(可以在我的项目中以100多种方式将其子类化) application.xml(Spring上下文文件)中的条目 我如何才能在application.xml中创建超类AbstractClassB的bean引用,以便可以在所有子类bean创建中使用它? 问题答案: 你可

  • 我有一个叫做Container的类: ServiceB依赖于ServiceA: 在我的应用程序中可以有几个容器。现在,有没有什么诀窍可以将这个已经被注入到与ServiceB相同的容器实例中的ServiceA实例注入到ServiceB中呢?

  • 在我的rest控制器中,我用一个定制的Spring验证器类验证输入JSON。 当我现在想为控制器编写单元测试时,我得到了一个错误,即找不到我的验证器。。。 这是我对应的Test类。 感谢您的帮助、提示或建议!

  • 我正在寻找有关如何改进当前测试类(以下示例)的设计的建议,该类依赖于具有自定义配置的。我通常使用构造函数注入来注入一个在整个应用程序中一致的HttpClient,但是,因为这是在类库中,所以我不能依赖库的使用者来正确设置。 null 这个设置对我来说似乎相当复杂,我希望有人能提出一个改进,但我知道这可能是相当主观的,所以如果有任何既定的模式或设计规则要遵循在这种情况下,我会非常感谢听到他们。 我包

  • 我试图使用模板依赖注入来测试一个使用C系统调用在文件描述符上操作的C类。ideia是有一个抽象类和一个实例来包装系统调用,如read()、写()等。然后我用一个模拟来测试我的目标类。抽象类和系统调用看起来像:(为了清楚起见,我准备省略参数) 后来,我在课堂上注入奥斯卡,我想使用它: 现在,如果我想使用mock来测试我的FD类,我只需要在模板参数中传递mock,并使用GetOsCall获取mock实