【发布时间】:2016-08-12 21:25:43
【问题描述】:
我有这个单元测试:
@RunWith (MockitoJUnitRunner.class)
public class RefChangEventTest {
@Mock
RefChange ref;
@Mock
SEPCommits sepCommits;
@Mock
SEPRefChangeEvent sepRefChangeEvent;
@Mock
RepositoryRefsChangedEvent refsChangedEvent;
@Mock
Repository repo;
@Test
public void gitNotesAreIgnored() throws Exception {
Collection<RefChange> refList = new ArrayList<RefChange>(1);
ArrayList commitListMock = mock(ArrayList.class);
refList.add(ref);
when(refsChangedEvent.getRefChanges()).thenReturn(refList);
when(refsChangedEvent.getRepository()).thenReturn(repo);
when(ref.getRefId()).thenReturn("refs/heads/foo");
when(sepRefChangeEvent.makeArrayList()).thenReturn(commitListMock);
sepRefChangeEvent.processEvent(refsChangedEvent);
verify(sepCommits, never()).findCommitInfo(ref, repo, commitListMock);
}
}
和匹配它的源代码在这里:
public ArrayList<Message> makeArrayList() {
return new ArrayList<Message>();
}
@Override
public List<Message> processEvent(RepositoryRefsChangedEvent event) {
ArrayList<Message> commitList = makeArrayList();
for (RefChange refChange : event.getRefChanges()) {
LOGGER.info("checking ref change refId={} fromHash={} toHash={} type={}", refChange.getRefId(), refChange.getFromHash(),
refChange.getToHash(), refChange.getType());
if (refChange.getRefId().startsWith(REF_BRANCH)) {
if (refChange.getType() == RefChangeType.ADD && isDeleted(refChange)) {
LOGGER.info("Deleted a ref that never existed. This shouldn't ever occur.");
}
else if (isDeleted(refChange) || isCreated(refChange)) {
branchCreation(refChange, event.getRepository(), commitList);
}
else {
sepCommits.findCommitInfo(refChange, event.getRepository(), commitList);
}
}
else {
LOGGER.info("This type of refChange is not supported.\n refId={} fromHash={} toHash={} type={}", refChange.getRefId(), refChange.getFromHash(),
refChange.getToHash(), refChange.getType());
}
}
return commitList;
}
我写的测试应该失败。 refID 是refs/heads/foo,它应该调用我正在测试的方法,永远不应该调用。但是,当我运行这个测试时,它以优异的成绩通过了。我在哪里搞砸了?
是的,我知道 PowerMockito 可以模拟构造函数,我制作了简单的makeArrayList() 方法来快速编写这个单元测试。
【问题讨论】:
-
请发布整个课程。我看到的是你从来没有从测试中设置类字段
标签: java unit-testing mockito