@MockBean
MyService myservice;
@Mock
MyService myservice;
mockito.mock()
MyService myservice = Mockito.mock(MyService.class);
普通仿基托图书馆
import org.mockito.Mock;
...
@Mock
MyService myservice;
而且
import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
来自Mockito库,功能等同。
它们允许模拟类或接口,并记录和验证其上的行为。
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public MyClassTest{...}
Spring Boot库包装模拟库
这的确是一堂春靴课:
import org.springframework.boot.test.mock.mockito.MockBean;
...
@MockBean
MyService myservice;
类包含在spring-boot-test
库中。
单元测试的设计目的是与其他组件隔离地测试一个组件,并且单元测试还有一个要求:在执行时间方面尽可能快,因为这些测试可能每天在开发人员计算机上执行十几次。
因此,这里有一个简单的指南:
当您编写一个不需要来自Spring Boot容器的任何依赖项的测试时,可以遵循经典/普通的Mockito:它速度快,并且有利于被测试组件的隔离。
如果您的测试需要依赖Spring Boot容器,并且您还想添加或模拟一个容器bean:@mockbean
来自Spring Boot是一种方法。
Spring Boot的典型用法@mockbean
当我们编写一个用@webmvctest
(web测试片)注释的测试类时。
Spring引导文档很好地总结了这一点:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(FooController.class)
public class FooControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private FooService fooServiceMock;
@Test
public void testExample() throws Exception {
Foo mockedFoo = new Foo("one", "two");
Mockito.when(fooServiceMock.get(1))
.thenReturn(mockedFoo);
mvc.perform(get("foos/1")
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andExpect(content().string("one two"));
}
}
问题内容: 方法和注释之间有什么区别?他们是一样的吗? 例如,这是: 与: 问题答案: 它们都达到相同的结果。通常不会使用注解(),因为您不会用看起来都一样的样板分配来填充代码。 请注意,为了使用注释,您的测试类应在其方法中进行注释或包含对的调用。
问题内容: 和框架有什么区别? 问题答案: 创建一个模拟。创建该类的实例,并将使用(或)注释创建的模拟注入该实例。 请注意,你必须使用或初始化这些模拟并注入它们。
我正在用它来实现一个模拟来调用我的抽象类。 但我的问题是,我的抽象类有太多的依赖关系是自动连接的。子类是。如果它不是一个抽象类,我会使用@InjectMocks来注入这些模拟依赖项。而是如何将mock添加到我上面给出的实例中。 在此处简化代码版本/ 我的Junit是
Mockito框架中的和有什么区别?
我在spring boot项目中为我们的服务类编写单元测试。当我自动连接正在测试的类时,测试正常运行,当我使用@MockBean insead of @Autowire时,测试失败。 有人能帮我区别一下@MockBean失败的原因吗?另外,在mockito中有一种模仿autowired类(当前类)方法的方法。
问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子: