<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">The root cause seems to be MigrateVmCommandTest and its relation to MigrateVmCommand.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">A common misconception is that if an object is annotated with @InjectMocks, Mockito will inject its @Mocks and @Spys to fields annotated with @Inject.</div><div class="gmail_default" style="font-family:monospace,monospace">This is, as noted, not correct - Mockito will attempt to injcet its mocks to *ALL* the fields, regardless of annotations.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">And here&#39;s where things start getting funky.</div><div class="gmail_default" style="font-family:monospace,monospace">Since the new field you introduced is an Object, any mock would be a possible match for it. If more than one mock fits the field (as you have in the test - dbFacade and vmValidator), Mockito silently skips injecting it, and leaves it null (not sure if this is a bug or an intentional ugly behavior) - need to look into this further.</div><div class="gmail_default" style="font-family:monospace,monospace">Even worse, this failure breaks the mocking sequence, so the mocked object isn&#39;t spied. When you attempt to stub it&#39;s behavior (e.g., with doReturn, as the first line of testValidationFailsWhenVmHasDisksPluggedWithScsiReservation does), it will fail with a NotAMockException). From there on, it&#39;s all down hill.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">The good news is that this test doesn&#39;t really need to inject mocks, so just removing that annotation solves the issue. I&#39;ve posted a patch [1], please review it.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">I&#39;ll also organize an MCVE reproducer and report a bug against mockito, and we&#39;ll see if there&#39;s any chance to get it solved any time soon.</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">-Allon</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">[1] <a href="https://gerrit.ovirt.org/#/q/topic:MigrateVmCommandTest">https://gerrit.ovirt.org/#/q/topic:MigrateVmCommandTest</a></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 16, 2017 at 11:55 AM, Shmuel Melamud <span dir="ltr">&lt;<a href="mailto:smelamud@redhat.com" target="_blank">smelamud@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi!<br>
<br>
I&#39;ve found yesterday a very strange bug, most likely in Mockito. Hard<br>
to believe it really happens, but I&#39;ve reproduced it in different<br>
environmentы and several revisions of oVirt master.<br>
<br>
I&#39;ve added the following line into MigrateVmCommand:<br>
<br>
     private Integer actualDowntime;<br>
+    private Object actualDowntimeLock;<br>
<br>
This line causes ALL tests to fail with NullPointerException. Some<br>
tests print such a stack trace:<br>
<br>
java.lang.NullPointerException<br>
    at org.mockito.internal.junit.<wbr>util.TestName.getTestName(<wbr>TestName.java:11)<br>
    at org.mockito.internal.junit.<wbr>MismatchReportingTestListener.<wbr>testFinished(<wbr>MismatchReportingTestListener.<wbr>java:29)<br>
    at org.mockito.internal.runners.<wbr>DefaultInternalRunner$1$1.<wbr>testFinished(<wbr>DefaultInternalRunner.java:56)<br>
    at org.junit.runner.notification.<wbr>SynchronizedRunListener.<wbr>testFinished(<wbr>SynchronizedRunListener.java:<wbr>56)<br>
    at org.junit.runner.notification.<wbr>RunNotifier$7.notifyListener(<wbr>RunNotifier.java:190)<br>
...<br>
<br>
Name of the field doesn&#39;t matter, but type matters - changing the type<br>
to Integer solved the problem.<br>
<br>
Does anybody has an idea why this happens and how to fix it?<br>
<br>
Shmuel<br>
______________________________<wbr>_________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a></blockquote></div><br></div>