例如,我有处理程序:
@Component
public class MyHandler {
@AutoWired
private MyDependency myDependency;
public int someMethod() {
...
return anotherMethod();
}
public int anotherMethod() {...}
}
@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {
@InjectMocks
private MyHandler myHandler;
@Mock
private MyDependency myDependency;
@Test
public void testSomeMethod() {
when(myHandler.anotherMethod()).thenReturn(1);
assertEquals(myHandler.someMethod() == 1);
}
}
但是当我试图模拟它时,它实际上调用anothermethod()
。如何使用MyHandler
来模拟它的方法?
首先,嘲笑MyHandler方法的原因如下:我们已经测试了AnotherMethod()
,并且它有复杂的逻辑,那么,如果我们可以验证
是否正在调用,我们为什么还要再次测试它(就像Somemethod()
的一部分)呢?
我们可以通过:
@RunWith(MockitoJUnitRunner.class)
class MyHandlerTest {
@Spy
@InjectMocks
private MyHandler myHandler;
@Mock
private MyDependency myDependency;
@Test
public void testSomeMethod() {
doReturn(1).when(myHandler).anotherMethod();
assertEquals(myHandler.someMethod() == 1);
verify(myHandler, times(1)).anotherMethod();
}
}
注意:对于“间谍”对象,我们需要使用doreturn
而不是thenreturn
(这里没有什么解释)
我正在SpringMVC上使用Mockito进行JUnit测试。测试使用@InjectMock和@Mock with when(方法(…)。然后返回(X)。问题是如何在@Inject实例中@Mock方法? 我尝试过创建两个实例,例如@InjectMocks Foo foInstance和@Mock Foo foInstanceMock;我的思维方式是区分注入什么实例和嘲笑什么实例。我也尝试使用间谍
我遇到一个关于注入的mock注释类中的mock私有方法的问题。我的代码如下 当我用power mockito创建一个UT类时,foo类应该是@injectMocks,因为foBean应该作为模拟类注入。但是当foo类被标记为@injectMocks时,它不能像“do返回”(“xxx”)那样模仿它的私有方法。当(foo,“方法2”)时,它会引起关于这不能应用于injectMocks的错误。 它被封锁
下面是抽象类的代码: 现在,我应该如何为编写单元测试,并且应该如何在中模拟会话? 我在Stackoverflow上尝试了不同的解决方案,但仍然无法模拟它并获得会话模拟。
我尝试模拟父类的受保护方法。因此,我使用&。我的家长班。
所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段。 正如您所看到的,ClassToTest不包含任何构造函数或setter,我正在使用spring自动关联字段。 现在,我有了一个具有classToTest所需的所有依赖项的基本测试类: 并且testClass扩展了这个BaseTest类: 这将导致保存时出现空指针异常。但是,如果我将设置方法更改为: 考试通过了
注释InjectMocks为我们提供了存根/填充私有成员和重用测试用例的方法。这是我们填充假成员时发生问题的概念代码。 问题是当我们模拟假的组件B时。然后,someShimmedMethod将返回null。似乎InjectMock无法将