本周我开始使用mockito
,但我遇到了一个问题,无法理解@injectmocks
字段。
我有一个a级是这样的:
public class A {
public B b;
public C c;
public String string;
}
当我在junit
测试中使用mockito
时,我这样调用它:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
B b;
@Mock
C c;
@InjectMocks
A a;
...
}
但我想设置字符串属性!我是这样试的:
Mockito.when(a.getString()).thenReturn("STRING");
但是,测试抛出一个异常:
MissingMethodInvocationException:when()需要一个必须是“mock上的方法调用”的参数。例如:when(mock.getarticles()).ThenReturn(articles);
此外,出现此错误的原因可能是:1。您使用final/private/equals()/hashCode()方法中的任一个作为存根。这些方法不能被截取/验证。2.内部when()不是对mock而是对其他对象调用method。3.被嘲弄班级的家长不是公共的。这是模拟引擎的一个限制。
我可以做其他事情来设置这个字段吗?
我可以做其他事情来设置这个字段吗?
是的,您也可以用@spy
将字段注释为下一个:
@Spy
@InjectMocks
A a;
那么您将能够执行mockito.when(.getString()).ThenReturn(“String”);
实际上,当它仅使用@injectmocks
进行注释时,mockito
不会对它进行模拟,默认情况下,它会创建类a
的普通实例,这样您就不能在它上面使用mockito.when()
。作为解决办法,您可以要求mockito
使用@spy
对其进行部分模拟。
您实际得到的异常是由于错误消息中提供的情况#2:
在when()中,您不是在mock上调用method而是在其他对象上调用method。
我不明白为什么这段带有Java泛型的代码无法编译。给定这个类: 无法模拟getList返回值: 使用“when…then”的唯一方法似乎是完全剥离泛型,代价是编译器警告: 最终,只有这样才能奏效:
我有一个类,它有两个方法。我想模拟这个类,然后模拟第一个方法,但不是第二个。 例如。 单元测试代码: 奇怪的是m2没有被调用。 我错过什么了吗?
问题内容: 我有这段代码在做Range Minimum Query 。当t = 100000时,i和j始终在每条输入行中更改,因此在Java 8u60中其执行时间约为12秒。 当我提取一个新方法以找到最小值时,执行时间快了4倍(约2.5秒)。 我一直认为方法调用很慢。但是这个例子却相反。Java 6也演示了这一点,但是在两种情况下(17秒和10秒)执行时间都慢得多。有人可以对此提供一些见识吗? 问
我有一段代码在做最小范围查询。当t=100000时,i和j在每个输入行中总是发生变化,其在Java8u60中的执行时间约为12秒。 当我提取一个新方法来寻找最小值时,执行时间快了4倍(大约2.5秒)。 我一直认为方法调用很慢。但是这个例子显示了相反的情况。Java6也演示了这一点,但是两种情况下的执行时间都要慢得多(17秒和10秒)。有人能对此提供一些见解吗?
我有一个GWT应用程序,我从文本框中获取输入,检查正则表达式的值,如果匹配,然后我将该文本添加到表格中。当我为例如“你好”输入任何正确的输入时,它工作得非常好。 任何帮助都将不胜感激。
问题内容: 我在Mockito中有这个: 该方法应始终返回一个新实例,但它会返回两次相同的引用。 为什么该方法不返回新值? 问题答案: 该方法将始终返回传递给它的内容。该代码是在调用之前执行的。然后将创建的内容传递给。因此有一个绝对的实例而不是创建机制。 如果需要提供新实例,请使用thenAnswer