- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是对此感到困惑(Mockito 1.10):
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Mock
private Collection<IndexableField> mockedFieldsFromRetrievedDocument;
@Spy
@InjectMocks
private IndexManager injectedSpyIM = new IndexManager();
@Test
public void numberOfLDocsShouldBePrintedOutWithEachHitLine() throws Exception{
LOGGER.info( String.format( "# A: %d", mockedFieldsFromRetrievedDocument.hashCode() ));
LOGGER.info( String.format( "# fFRD %s", injectedSpyIM.getFFRD() ));
自然有方法getFFRD
在IndexManager
它返回私有(private)字段
private Collection<IndexableField> fieldsFromRetrievedDocument;
IndexManager
中还有另一个私有(private)字段:
private Collection<Closeable> closeableComponents;
第一行记录为您提供有效的哈希码。
最后一行表示
# fFRD null
当我检查 closeableComponents
的值时我发现它的哈希码确实是注入(inject)的模拟的哈希码 Collection
.
然后我尝试交换 IndexManager
中这些字段的声明位置。 :没有变化。
看来@Mock
这里的行是 1) 完全忽略通用类和 2) 锁定 Collection<Closeable>
由于我不明白的原因,优先于另一个......
稍后
哇,疯狂的东西:我刚刚更改了字段的名称 closeableComponents
至xcloseableComponents
。现在模拟的字段确实正在做我想要的事情,即模拟字段 fieldsFromRetrievedDocument
.
很自然,我的临时结论是 Mockito 使用 Collection<anything>
类型的第一个字段名称。它发现......按字母顺序排列!据推测,相同的选择过程也适用于存在多个“相同”类型字段的其他情况。只是用谷歌搜索了一下,但没有成功:有人知道这是否记录在某处吗?
稍后
按照 Jeff Bowman 的建议,我做了如下更改:
@Mock(name="fieldsFromRetrievedDocument")
private Collection<?> mockedFieldsFromRetrievedDocument;
...这是类中字段的精确拼写(大小写正确)。但仍然注入(inject)错误Collection<?>
作为模拟。然后...
我从Mockito 1.10换到最新的2.3.0:问题解决了!一个警示故事,其中 name
属性在 1.10 的 Javadoc API 中有完整记录...!
最佳答案
@InjectMocks
documentation 描述了行为,其记录或确定性可能比您希望的要少:
Property setter injection; mocks will first be resolved by type (if a single type match injection will happen regardless of the name), then, if there is several property of the same type, by the match of the property name and the mock name.
Note 1: If you have properties with the same type (or same erasure), it's better to name all @Mock annotated fields with the matching properties, otherwise Mockito might get confused and injection won't happen.
这是有道理的,因为该字段的通用类型被删除——在运行时不可读——并且因为 Java 的反射方法 getDeclaredFields
和 getDeclaredMethods
返回 "not in any particular order" 。匹配的名称是首选,其他一切都是未定义的行为,您的重命名恰好可以对您有利;不要指望这种行为。
上面命名模拟的概念是指在 @Mock
annotation 上使用 name
属性。
关于java - Mockito - 什么规则管理类似 Collection 类的模拟注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41079432/
我正在尝试测试依赖于其他服务 authService 的服务 documentViewer angular .module('someModule') .service('docu
如果我的网站上线(不要认为它会,目前它只是一个学习练习)。 我一直在使用 mysql_real_escape_string();来自 POST、SERVER 和 GET 的数据。另外,我一直在使用 i
我有以下代码,它容易受到 SQL 注入(inject)的攻击(我认为?): $IDquery = mysqli_query($connection, "SELECT `ID` FROM users W
我一直在自学如何创建扩展,以期将它们用于 CSS 注入(inject)(以及最终以 CSS 为载体的 SVG 注入(inject),但那是以后的问题)。 这是我当前的代码: list .json {
这个简单的代码应该通过 Java Spring 实现一个简单的工厂。然而结果是空指针,因为 Human 对象没有被注入(inject)对象(所以它保持空)。 我做错了什么? 谢谢 配置 @Config
我正在编写一个 ASP.NET MVC4 应用程序,它最终会动态构建一个 SQL SELECT 语句,以便稍后存储和执行。动态 SQL 的结构由用户配置以用户友好的方式确定,具有标准复选框、下拉列表和
首先让我说我是我为确保 SQL 注入(inject)攻击失败而采取的措施的知己。所有 SQL 查询值都是通过事件记录准备语句完成的,所有运算符(如果不是硬编码)都是通过数字白名单系统完成的。这意味着如
这是 SQL 映射声称可注入(inject)的负载: user=-5305' UNION ALL SELECT NULL,CONCAT(0x716b6b7071,0x4f5577454f76734
我正在使用 Kotlin 和 Android 架构组件(ViewModel、LiveData)构建一个新的 Android 应用程序的架构,并且我还使用 Koin 作为我的依赖注入(inject)提供
假设 RequestScope 处于 Activity 状态(使用 cdi-unit 的 @InRequestScope) 给定 package at.joma.stackoverflow.cdi;
我有一个搜索表单,可以在不同的提供商中搜索。 我从拥有一个基本 Controller 开始 public SearchController : Controller { protected r
SQLite 注入 如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚
我可以从什么 dll 中获得 Intercept 的扩展?我从 http://github.com/danielmarbach/ninject.extensions.interception 添加了
使用 NInject 解析具有多个构造函数的类似乎不起作用。 public class Class1 : IClass { public Class1(int param) {...} public
我有一个 MetaManager 类: @Injectable() export class MetaManager{ constructor(private handlers:Handler
我是 Angular 的新手,我不太清楚依赖注入(inject)是如何工作的。我的问题是我有依赖于服务 B 的服务 A,但是当我将服务 A 注入(inject)我的测试服务 B 时,服务 B 变得未定
我正在为我的项目使用 android 应用程序启动、刀柄和空间。我在尝试排队工作时遇到错误: com.test E/WM-WorkerFactory: Could not instantiate co
我不确定这是什么糖语法,但让我向您展示问题所在。 def factors num (1..num).select {|n| num % n == 0} end def mutual_factors
简单的问题,我已经看过这个了:Managing imports in Scalaz7 ,但我不知道如何最小化注入(inject) right和 left方法到我的对象中以构造 \/ 的实例. 我确实尝
在我的 Aurelia SPA 中,我有一些我想在不同模块中使用的功能。它依赖于调用时给出的参数和单例的参数。有没有办法创建一个导出函数,我可以将我的 Auth 单例注入(inject)其中,而不必在
我是一名优秀的程序员,十分优秀!