我有如下测试方法:
MyClass myClass= Mockito.mock(MyClass.class);
Mockito.when(myClass.methodUsedInMethodBeingTested(Matchers.any(MyTypeParam.class))).thenReturn(Collections.<X, Y> emptyMap());
assertNull(myClass.methodToTest(myObject));
Mockito.verify(myClass).methodUsedInMethodBeingTested(Matchers.any(MyTypeParam.class));
MethodUsedInMethodBeingTest
是我要模拟并返回空映射的方法。但我收到的失败信息说
需要但未调用MyClass.MethodUsedInMethodBeingTest()
.
MyClass
{
public XYZ methodToTest()
{
....
....
Map<X,Y> mp = methodUsedInMethodBeingTested(myTypeParam);
.....
}
public Map<X,Y> methodUsedInMethodBeingTested(MyTypeParam myTypeParam)
{
.....
}
}
你误会了什么是模仿。当你在做
MyClass myClass = Mockito.mock(MyClass.class);
// ...
assertNull(myClass.methodToTest(myObject));
实际上并不是在实际对象上调用MethodToTest
。您将在模拟上调用MethodToTest
,默认情况下,该模拟不执行任何操作并返回NULL
,除非它被挂起。引用Mockito文档:
默认情况下,对于所有返回值的方法,mock将返回null、空集合或适当的基元/基元包装值(例如:0、false、...for int/integer、boolean/boolean、...)。
这解释了您随后出现的错误:实际上没有在mock上调用该方法。
看来您需要的是spy
:
你可以创建真实物体的间谍。当您使用spy时,将调用真正的方法(除非某个方法被挂起)。
但需要注意的是:由于调用的是real方法,因此不应使用mockito.when
,而应使用mockito.doreturn(...).when
,否则将为real调用一次该方法。如果考虑以下表达式:
Mockito.when(myClass.methodUsedInMethodBeingTested(Matchers.any(MyTypeParam.class))).thenReturn(Collections.<X, Y> emptyMap());
^-----------------------------------^
this will be invoked by Java
必须计算方法when
的参数,但这意味着将调用方法MethodUsedInMethodBeingTest
。而且既然我们有一个间谍,它就是将被调用的真正的方法。因此,请使用:
MyClass spy = Mockito.spy(new MyClass());
Mockito.doReturn(Collections.<X, Y> emptyMap()).when(spy).methodUsedInMethodBeingTested(Matchers.any(MyTypeParam.class));
assertNull(spy.methodToTest(myObject));
Mockito.verify(spy).methodUsedInMethodBeingTested(Matchers.any(MyTypeParam.class));
我是写测试和使用Mockito的新手。我在Stackoverflow上阅读了类似的主题,并做了建议的更改,确保所考虑的类/接口/方法是开放的。 我试图跟踪这个 模仿构造函数注入的依赖项 这是我目前想出来的测试 但我一直得到的回应是 即使我在测试中没有提到这种方法,我也得到了这种反应。这是我的演示者注册方法。我已经改变了类/接口 同样地 这里是接口 感谢您的帮助。
我有个问题。我用mockito创建对象。然后我对方法进行验证,当运行测试时,它给我的错误是Wanted但not invived。并且服务保持为()。 test不是按照verify运行的,没有调用Wanted buy。
我已经通过StackOverflow上的帖子。 想要但没有被调用:实际上,这个模拟没有任何交互。 我确实做了被要求的事情,但我仍然错过了一些东西。你能帮帮我我错过了什么吗? 我的Java代码: 我的单元测试: 一切正常工作,除了我得到错误作为
我知道其他人问过这个(或类似的)问题,但没有一个解决方案对我有帮助。我有3节课: 我的测试类: 我想验证B. subMethod()是否在A. superMethod()中被调用。我如何才能完成此任务。我知道我需要使用PowerMock来完成此任务,但我不确定如何。此外,我不允许更改有关A类或B类的任何内容。 任何帮助都将不胜感激!
我试图学习和,以实现我正在为一个已经工作的Android项目创建测试。但是我有一些麻烦。这会让你知道我想测试的活动: 这段代码所做的是获取Active会话,根据它的状态,它显示了不同的。现在我将向您展示测试类: 正如你所见,我在一个单独的java项目中使用了Robolectric和Mockito。当我运行测试类时,我得到以下信息: 你能帮我一下吗? 编辑 我去掉了ActivityControlle
我实际上是在努力做下面的事情:我的服务类 这让我想要的没有被调用,实际上与这个模拟没有任何交互。你知道我做错了什么吗??