我正在使用JUnit5和Mockito为一个类Main编写单元测试。java
。
依赖类ExternalApi。java
被注入到Main中。java
。
这是我的main测试。java
:
@ExtendWith(MockitoExtension.class)
public class MainTest {
@InjectMocks
Main main;
@Mock
ExternalApi externalApi;
@Test
void testAbcMethod() {
}
}
Main.java
中的abc()方法调用extranalApi.do某物()
执行一些操作。
我不想在测试中调用这个原始的externalApi方法。我需要定义吗
doNothing().when(externalApi).when(doSomething());
或者它只是够嘲笑ExtranalApi
?
当我们不定义调用模拟对象的方法时会发生什么?
什么都没发生。mock已经足够了,因为调用的不是真正的类/方法,而是被模拟的类/方法。
如果窥探了实例,就会触发真正的方法调用。只有到那时,您才会想到使用doNo
来抑制方法行为。
@Test
public void whenNotDefineBehaviorOnMock_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
// No behavior defined,
mockList.add("one");
Mockito.verify(mockList).add("one");
// Size is still empty
assertEquals(0, mockList.size());
// Behavior defined
Mockito.when(mockList.size()).thenReturn(100);
assertEquals(100, mockList.size());
}
我最近看到了一些Mockito 1.9.5代码,其工作原理如下: 由于myObject不是一个模拟对象,而是一个非模拟类的实例,所以我很惊讶,它编译并运行时没有通过单元测试。我希望我会遇到一个失败,比如“你让我在非模拟对象上设置一个期望值,而我希望只在模拟对象上设定期望值。” 为什么这段代码不会导致测试失败? 更新:添加更多的代码,这是实际复制我感到困惑的行为所必需的。这些例子充分说明了我的问题。
问题内容: 我有一个使用Mockito和Spring Test框架的非常简单的测试用例。当我做 我得到这个例外。 我尝试使用不同的方法,但继续收到此错误消息。我在Mockito中使用Spring 3.1.0.RELEASE。请分享并指导我正确的方向。 问题答案: 您需要先创建pcUserService的MOCK,然后使用该模拟。
有许多方法可以使用mockito初始化模拟对象。其中什么是最好的方法? 1. 建议我有没有比这些更好的方法...
我最终得到。 我是否可以模拟并且在测试时仍然得到消息错误?
我一直在试图理解嘲笑是如何工作的。我读过各种回应,似乎有一个相互矛盾的论点,Mockito是否在内部使用反射。 这里,它清楚地说明了mockito不使用反射:https://stackoverflow.com/questions/15970810/using-mockito-to-mock-methods-by-reflection#:~:text=mockito%20is%20a%20realt
问题内容: 有很多方法可以使用MockIto初始化模拟对象。其中最好的方法是什么? 1。 2。 [编辑] 3。 如果有其他方法可以建议我… 问题答案: 对于模拟初始化,使用或是严格等效的解决方案。从MockitoJUnitRunner的javadoc中: 当你已经在测试用例上配置了特定的运行器时,可以使用第一个解决方案(带有)。 第二个解决方案(带有)更经典,也是我的最爱。代码更简单。使用转轮提供