我有一个特殊的情况,在这里我必须模拟一些字段,并为我的类同时使用@mock和@spy,因为在一些测试中我需要改变它自己的方法的行为。我使用@InjectMocks作为构造函数。看起来是这样的:
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
private SomeObject usedAsNonFinal;
@Mock
private SomeObject usedAsFinal;
@Spy
@InjectMocks
private ServiceTest service = new ServiceTest(usedAsNonFinal, usedAsFinal);
@Before
public void setup() {
when(usedAsNonFinal.someMethod(Matchers.any()))
.thenReturn(someObject);
when(usedAsFinal.someMethod(Matchers.any()))
.thenReturn(someObject);
doReturn(someObject).when(service).someMethod(Matchers.any());
}
}
正在测试的服务:
@Service
public class Service {
private SomeObject usedAsNonFinal //injects correctly
private final SomeObject usedAsFinal; //null - not injected
@Autowired
public Service (SomeObject usedAsNonFinal, SomeObject usedAsFinal){
this.usedAsNonFinal = usedAsNonFinal;
this.usedAsFinal = usedAsFinal;
}
//some methods to mock depending on test
}
问题是--正如代码中所评论的那样--final字段没有被注入并且它是空的。当我移除final关键字时,它将被正确地注入,并且所有测试都按照预期工作。我尝试了其他主题中的一些技巧--也使用了反射,但在这个特定的情况下似乎没有任何效果。
您是否尝试在测试中不实例化serviceTest
?
@injectmocks应该为您做这件事。试试看
@Spy
@InjectMocks
private ServiceTest service;
我有一个用Mockito测试的类(PriceSetter),这个类有一个内部依赖项(一个数据库)。我想模拟这个内部依赖关系,然后将其注入类中,但在我的构造函数中没有指定依赖关系。因此,Mockito会自动尝试进行构造函数注入,而依赖项永远不会被注入。 我尝试在我的数据库对象上使用@mock,在我的PriceSetter类上使用@injectmocks,但是Mockito自动调用构造函数,它无法注入
问题内容: 我试图监视一个对象,并且想在构造函数调用它之前对构造函数调用的方法进行存根。 我的课看起来像这样: 不能调用setup方法。好吧,我如何监视这种方法(以及存根设置,使其什么也不做)? 模拟方法可以很好地工作,但是我想进行单元测试,因此我将需要其他方法。 之所以需要对设置方法进行打桩以使其无能为力的原因: 我正在对Lego机器人(lejos)进行编程,并在设置中放入了一些代码,该代码需要
我想模仿下面的课程: 就像JMockit一样 与Mockito 3类似, 问题:在构造过程中将字符串注入会失败,因为是最终类。收到如下错误消息: 可以使用新关键字初始化测试的类: 然而,上面的解决方案并不像仅仅使用注释那样流畅 问题:如何将最终类注入到注释为的对象中,而不是显式地用关键字构建它?
问题内容: 我目前正在研究Mockito框架,并且已经使用Mockito创建了一些测试用例。但后来我读到的不是调用模拟( SomeClass的 的.class)我可以使用和-我需要做的唯一一件事情就是我的注释测试类或使用的方法。 但这不起作用-似乎不会起作用!这是我的2个代码修订-一个使用注释,另一个不使用注释。 我究竟做错了什么? 正如我所说-这项工作很棒。但是以下内容不会: 这是课程: 我想念
当使用@InjectMocks时,它会自动尝试按照以下顺序进行注入:构造器、设置器、字段。它通过检查类型来检查是否可以在这些地方中注入,然后在有多种类型的可能性时命名。这对我来说不太好用,因为我的模拟映射锁实际上是通过它的setter注入到dontMockMe中的。我无法编辑此抽象类。有什么办法让我绕过塞特注射吗?提前谢谢!
Mockito lib允许用@injectmock注入对象吗?我见过@Spy注释的例子,但当我试图使用它时,总是得到NullPointerException。我知道我总是可以直接使用reflect,但想法是避免这样的代码。