您是否可以将mocks
注入@InjectMock
是Deep Stubs,还是需要用Deep Stubs定义每个模拟?仅出于用深的存根注释来定义未使用的字段是不便的。
示例,有没有办法在不定义注射的情况下进行此操作,因为它从未在任何地方使用?
@InjectMocks
private Object testMe;
@Mock (answer = Answers.RETURNS_DEEP_STUBS)
private Object injected;
不,你不能。您还在堆叠有趣的警告标签:
-
来自returns_deep_stubs:
警告:常规清洁代码很少需要此功能!将其留给旧版代码。嘲笑模拟返回模拟,返回模拟,(...),以返回有意义的暗示,违反了对Demeter的法律或嘲笑价值对象(一个已知的反模式)。
好报价我在网上有一天见过:每次模拟返回模拟童话去世。
-
来自@injectsmocks:
Mockito将尝试按顺序和如下所述,仅通过构造仪注入,设置器注入或财产注入来注入模拟。如果以下任何策略失败,则Mockito 不会报告失败;即您必须自己提供依赖项。
构造函数注入; 选择了最大的构造函数,然后仅在测试中声明的模拟来解决参数。如果对象是通过构造函数成功创建的,则 Mockito将不会尝试其他策略。如果Mockito具有参数构造函数,则决定不损坏它。
通过允许具有自动深的存根的注射液,您可能会发现很难理解您实际使用的注射样式和现场人口,以及测试的哪些部分是真实的而不是模拟的。这也将阻止您通过直接通过您的系统下测试来使其固执或验证任何其他值,这可能会导致副作用,或者以其他方式打破实际代码和测试代码之间的边界。
简而言之,答案是"否";较长的答案是,您应该考虑重构以包括适当的依赖注入访问权限并避免任何当前违规法则。