tsx81429 发表于 2024-11-10 12:22:46

Java Mocking神器 | Mockito测试框架的一些实践体会

配景:Mockito是一个Java单元测试开辟框架。在写测试单元时它可以Mock(模仿)开辟中一些未完成的接口或者网络断开、数据库连接错误等方法调用。Mockito 的可读性非常好,不会让你感到迷惑,产生的验证错误也很明确。以下为作者的一些使用体会,供大家参考。
Mockito是一个盛行的Java测试框架,开辟职员通过它能够为单元测试创建模仿对象,通过模仿外部依赖关系的举动,使得单独测试单个组件成为大概。这对于测试复杂的系统特别有用,特别是那些外部依赖的举动是不可预测的或难以控制的系统。
使用模仿对象举行隔离测试
使用Mockito的第一步是为代码中的依赖关系创建模仿对象。通过隔离测试每个单元,可以直接验证它而不依赖于外部依赖。这使得在开辟过程的早期辨认和修复任何问题变得更加轻易。
验证举动,而不是实现
当测试一个方法时,重要的是关注该方法的举动,而不是实在现细节。这有助于确保测试的结实性和可维护性,同时也更轻易在不影响测试的情况下对实现举行修改。
使用ArgumentCaptor举行复杂的参数匹配
ArgumentCaptor是Mockito的一个强盛的功能,能够以一种更灵活和可读的方式捕捉和验证方法参数。这在测试复杂参数的方法时特别有用,比如聚集或自界说对象。
使用thenCallRealMethod
thenCallRealMethod()是Mockito的一个功能,它允许调用一个方法的真正实现,而不是模仿的版本。虽然这在某些情况下很有用,但要审慎使用这个功能,虽然在肯定程度测试更加连贯,但也更难明确。
使用注解,如@Mock和@InjectMocks
Mockito提供了几个注解,如@Mock和@InjectMocks,可以让创建和注入模仿对象到你的测试中更加轻易。通过使用这些注解,可以减少设置测试所需的模板代码量,并使测试更具可读性。
制止使用reset()
Reset是Mockito的一个功能,它可以让你清除一个模仿对象的状态。虽然这在某些情况下是有用的,但重要的是要审慎使用它,因为它可以使测试变得脆弱和难以明确。一个更好的方法是使用像@Before如许的注解,在每次测试前创建一个新的模仿对象。
代码示例
这里有一个代码例子,演示了一些使用Mockito的实践。
import static org.mockito.Mockito.*;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class ExampleTest {

   @Mock
   private Dependency dependency;

   @InjectMocks
   private Service service;

   @Captor
   private ArgumentCaptor<String> argumentCaptor;
   
   @Before
   public void setup() {
      MockitoAnnotations.initMocks(this);
   }

   @Test
   public void testService() {
      // arrange
      when(dependency.doSomething("input")).thenReturn("output");
      
      // act
      String result = service.useDependency("input");
      
      // assert
      verify(dependency).doSomething(argumentCaptor.capture());
      assertEquals("input", argumentCaptor.getValue());
      assertEquals("output", result);
   }
} 在这个例子中,使用@Mock注解来为Dependency类创建一个模仿对象。使用@InjectMocks注解来将模仿对象注入到服务类的实例中,可以单独地测试服务类,而非必须依赖类的举动。
我们还使用@Captor注解来创建一个ArgumentCaptor对象,可以捕捉并验证传递给Dependency类的doSomething方法的参数。与使用eq或其他参数匹配器相比,这是一种更加灵活和可读的方式来测试传递给方法的参数。
在testService方法中,使用when方法来实现doSomething方法的模仿和被调用时的返回结果。还使用验证方法来验证doSomething方法是用预期的参数调用的。最后,使用 assertEquals 方法来验证 useDependency 方法的结果。
总结

Mockito是一个强盛的Java测试框架,它能够让开辟者给单元测试创建模仿对象。通过遵循好的实践履历,可以确保测试是结实的、可维护的,并且易于明确。无论你是在测试复杂的系统照旧简单的组件,Mockito都可以资助你验证代码的举动,并在开辟过程中及早发现任何问题。
最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】
https://i-blog.csdnimg.cn/blog_migrate/69d8f0d9807ca72d5525111ba8f515a3.png#pic_center
 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战堆栈,这个堆栈也伴随上万个测试工程师们走过最艰巨的路程,希望也能资助到你!
软件测试技术交流群社:786229024(里面还有工作内推机会,毕竟我们是关系社会。) 软件测试面试文档

我们学习肯定是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满足的工作。
https://i-blog.csdnimg.cn/blog_migrate/4665038732228e273b7c7ac576d64ae8.png
面试文档获取方式:

https://i-blog.csdnimg.cn/blog_migrate/c81893e94c79d20993cce088b9c71633.gif


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Java Mocking神器 | Mockito测试框架的一些实践体会