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);
}
}
我知道,如果我将store
从BaseController
移动到MyController
,我可以在构造函数中初始化它(就像我对验证器所做的那样)。但是,我希望将存储放在基类中,因为它将被扩展它的其他类使用。
根据我的类的设置方式,如何在测试时注入store
?
不要使用现场注射。使用构造函数注入。
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实