关于javamokito的信息
本篇文章给大家谈谈javamokito,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Mockito怎么样Mock返回值为空的方法
- 2、「测试」Mockito测试系统方法调用次数
- 3、如何对Java单例模式进行mock
- 4、怎么mockito方法的内部对象
- 5、优雅单测-3用Mockito轻松解决复杂的依赖问题
- 6、Java中mockito类库有神马作用? 其中的whitebox类又有何用? 来高人解释一哈子~~
Mockito怎么样Mock返回值为空的方法
Mockito怎么样Mock返回值为空的方法?
Mockito这个类是很轻松mock带有返回值的方法。
但是当遇到没有返回值的方法时,就非常的麻烦了。
下面提出解决方法:
Java代码
public class People{
public void sayHello(String str){
System.out.println(str);
}
}
People mockPeople =Mockito.mock(People.class);
Mockito.doAnswer(new AnswerObject() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
return "called with arguments: " + args;
}
}).when(mockPeople).sayHello("Hello");
当mock方法的时候,有的时候要mock掉对参数没太确定的时候用下面的方法:
foo = fooDao.getBar(new Bazoo());
when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);
when(
fooDao.getBar(
any(Bazoo.class)
)
).thenReturn(myFoo);
or (to avoid nulls):
when(
fooDao.getBar(
(Bazoo)notNull()
)
).thenReturn(myFoo);
就是这样
「测试」Mockito测试系统方法调用次数
关于这篇文章的起源,是在做一个小练习的时候,要求 TDD。真的是一个很小的练习,没有什么可测试的,那么我就想着要不测试下 System.out 被调用了多少次吧。
测试结果符合预期
为什么不用 @InjectMocks ?
System.out 在 java 中,不需要 import 就可以使用,所以此处通过 System.setOut(mockedSystemOut) 来代替了依赖注入,故而不需要在 PrintlnCalled 类上面用 @InjectMocks 了。
改变了输出流,在测试结束后,一定要恢复输出流的默认测试,不然会影响正常的输出功能。
如何对Java单例模式进行mock
public class HelloWorld {
private static HelloWorld instance = new HelloWorld();
private HelloWorld() {}
public static HelloWorld getInstance() {return instance;}
public void say() {
System.out.println("Hello World!");
}
}
public class HelloWorld {
private static HelloWorld instance = new HelloWorld();
private HelloWorld() {}
public static HelloWorld getInstance() {return instance;}
public void say() {
System.out.println("Hello World!");
}
}
测试代码:
public class HelloWorldAppTest {
private HelloWorldApp helloWorldApp;
@Before
public void setUp() throws Exception {
helloWorldApp = new HelloWorldApp();
}
@Test
public void sayHelloWorld() throws Exception {
HelloWorld instanceMock = PowerMockito.mock(HelloWorld.class);
Whitebox.setInternalState(HelloWorld.class, "instance", instanceMock);
Mockito.doNothing().when(instanceMock).say();
helloWorldApp.sayHelloWorld();
Mockito.verify(instanceMock).say();
}
}
怎么mockito方法的内部对象
怎么mockito方法的内部对象?Mockito是一个针对Java的mocking框架。它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的mocking库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。下文为转载,但原文有问题,错误的地方特地标红了
Introduction
Code in which new objects are created can be difficult to test. There are a number of patterns for doing this; two of them are discussed here. Both of these patterns may require rearranging your code a little, to make it more testable. Writing code that's easily testable is a good thing to be doing, regardless of which mocking framework you end up using.
Details
Pattern 1 involves factoring uses of new into one-line methods, then using a Mockito spy. This is the simpler of the two patterns. Pattern 2 involves factoring uses of new into a separate class and injecting it. It's a little more work, but it can be more powerful. The new calls that you want to factor out (using either pattern) are those where an object is created, that you are likely to want to mock. It is recommended that you use one or other of these patterns, whenever you find yourself writing new, on a class that's in your code base (as opposed to a JDK class or a class from a third party library).
优雅单测-3用Mockito轻松解决复杂的依赖问题
Mockito是GitHub上用于Java使用最广泛的Mock框架
Mockito核心解决的问题:不管是测试驱动开发,还是系统架构本身,都会带来的依赖结构复杂问题;单元测试做软件中的最小可测试单元,只应依当前单元的配置。 所有较大的系统都会有依赖复杂的问题。 此类问题就需要Mock框架来解决
使用很简单一般分3部:
@MockBean,在SpringBoot中通过@MockBean注解,就可以快速装在一个Mock的Bean了。
此方式通过非常简单的方式解决了系统层级之间单测的依赖,可以用在数据层和业务层,也可以用在业务层之间的多项依赖等依赖上的问题
直接执行:
可以看到如果使用了SpringBoot,并且使用@MockBean可以快速解决依赖的问题。但是,Mock出的LiveReportMapper对象其实是个空壳,那么既然是mock就要知道如何通过mock的方式解决各种复杂逻辑
下面模拟2种复杂逻辑,Service层的单元测试mock依赖的另外一个Service类"InfoService" ,并且mock里面的2个方法
下面看例子:
如果没有SpringBoot环境的Starter,可以直接使用Mockito。 除了@MockBean不能使用其他功能不受影响,参考上面例子
更多用法参考Mockito官方文档,此处不做赘述
官网地址:
Java中mockito类库有神马作用? 其中的whitebox类又有何用? 来高人解释一哈子~~
有点类似于Maven
举个例子,比如你跑一个测试case去测试A类的f方法,但是这个A类依赖于很多其他的类才能正常运行,其他类有依赖了很多类。很麻烦,mockito就能创建一些中间对象,来替代你需要的类。
whitebox 是白盒测试,比较高级的测试,需要对代码结构,逻辑都很清楚,不同于黑盒测试,只要测试功能是否正常
关于javamokito和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。