如何模拟 sling PropertyIterator?
How to mock sling PropertyIterator?
我有以下代码要测试:
static Set<String> methodToTest(Node crxProductNode, OfflineNodeAction nodeAction, Set<String> allowedAttributes) throws RepositoryException {
Set<String> changedPropertiesKeys = new HashSet<String>();
final PropertyIterator crxProductNodeProperties = crxProductNode.getProperties();
while (crxProductNodeProperties.hasNext()) {
final String crxNodePropertyName = crxProductNodeProperties.nextProperty().getName();
if(nodeAction.getProperties(crxNodePropertyName)==null && allowedAttributes.contains(crxNodePropertyName)){
changedPropertiesKeys.add(crxNodePropertyName);
}
}
return changedPropertiesKeys;
}
请告诉我如何测试以下代码。
我对迭代器模拟有疑问。我不明白如何模拟它。
因为PropertyIterator
是从crxProductNode
接收到的,它是传递给方法的参数,所以它是所谓的"test collaborator"的书本定义。
我们应该模拟测试协作者,在你的情况下模拟 crxProductNode
到 return 另一个 PropertyIterator
类型的模拟并传递它方法。
具体代码取决于你的mocking框架,但应该是类似下面的伪代码:
@Test
public void testMyPropertyIterator() {
Sut sut = new SUT(); // System Under Test, the class with your method
Node nodeMock = mock(Node.class);
PropertyIterator mockProperties = mock(PropertyIterator.class);
when(nodeMock.getProperties()).thenReturn(mockProperties);
sut.methodToTest(nodeMock, ...);
// verification or assertions
}
因为这个存在class
org.apache.sling.commons.testing.jcr.MockNode
和
MockNodeIterator
我有以下代码要测试:
static Set<String> methodToTest(Node crxProductNode, OfflineNodeAction nodeAction, Set<String> allowedAttributes) throws RepositoryException {
Set<String> changedPropertiesKeys = new HashSet<String>();
final PropertyIterator crxProductNodeProperties = crxProductNode.getProperties();
while (crxProductNodeProperties.hasNext()) {
final String crxNodePropertyName = crxProductNodeProperties.nextProperty().getName();
if(nodeAction.getProperties(crxNodePropertyName)==null && allowedAttributes.contains(crxNodePropertyName)){
changedPropertiesKeys.add(crxNodePropertyName);
}
}
return changedPropertiesKeys;
}
请告诉我如何测试以下代码。
我对迭代器模拟有疑问。我不明白如何模拟它。
因为PropertyIterator
是从crxProductNode
接收到的,它是传递给方法的参数,所以它是所谓的"test collaborator"的书本定义。
我们应该模拟测试协作者,在你的情况下模拟 crxProductNode
到 return 另一个 PropertyIterator
类型的模拟并传递它方法。
具体代码取决于你的mocking框架,但应该是类似下面的伪代码:
@Test
public void testMyPropertyIterator() {
Sut sut = new SUT(); // System Under Test, the class with your method
Node nodeMock = mock(Node.class);
PropertyIterator mockProperties = mock(PropertyIterator.class);
when(nodeMock.getProperties()).thenReturn(mockProperties);
sut.methodToTest(nodeMock, ...);
// verification or assertions
}
因为这个存在class
org.apache.sling.commons.testing.jcr.MockNode
和
MockNodeIterator