我正在测试的对象实现了一个接口,并且有一个字段,其类型是同一个接口(委托)。我想要一个Mock对象,我可以将其注入到被测对象的endfor;
字段中,并且我希望被测试的对象是一个间谍(在这个例子中不太相关,但在我的情况下,我想要能够存根某些对象的方法。)
delegate
我想使用import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.*;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class UselessTest {
@Mock private Useless mock;
@Spy private UnderTest underTest = new UnderTest() {};
@Before public void before() { underTest.delegate = mock; }
@Test public void testDoNothing() throws Exception {
underTest.doNothing();
verify(mock).doNothing();
}
public interface Useless { void doNothing(); }
public abstract static class UnderTest implements Useless {
public Useless delegate;
@Override public void doNothing() { delegate.doNothing(); }
}
}
注释而不是@InjectMocks
初始化方法,但到目前为止我还没有成功。
我正在使用Mockito 1.9.5和JUnit 4.11。
我尝试了几种解决方案,每种解决方案因其他原因而失败。 :
@Before
使用第一个解决方案时,测试最终会出错,异常@Spy @InjectMocks private UnderTest underTest;
@Spy @InjectMocks private UnderTest underTest = new UnderTest() {};
@InjectMocks private UnderTest underTest = Mockito.spy(new UnderTest() {});
(抽象类org.mockito.exceptions.base.MockitoException
无法由Mockito实例化)
使用第二个解决方案时,测试最终会出现异常UnderTest
(Mockito尝试将测试中的对象注入其自身而不是具有相同接口的模拟)
最后使用第三个解决方案,在调用测试方法(Mockito没有将模拟注入org.mockito.exceptions.misusing.NotAMockException
字段)时,测试最终导致异常java.lang.NullPointerException