将模拟注入相同类型的间谍对象

时间:2016-03-15 10:47:47

标签: java mockito spy

我正在测试的对象实现了一个接口,并且有一个字段,其类型是同一个接口(委托)。我想要一个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

0 个答案:

没有答案