美文网首页
静态方法单元测试

静态方法单元测试

作者: 另存為 | 来源:发表于2021-09-22 21:17 被阅读0次

    将mockito-core换成mockito-inline

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-inline</artifactId>
        <version>3.6.0</version>
        <scope>test</scope>
    </dependency>
    

    先创建一个调用了静态方法的待测试类

    import java.time.LocalDate;
     
    public class Utils {
        public LocalDate getCurrentDate() {
            return LocalDate.now();//now()为静态方法
        }
    }
    

    创建单元测试类

    @RunWith(MockitoJUnitRunner.class)
    @SpringBootTest
    @TestInstance(PER_CLASS)
    class UtilsTest {
        @Autowired
        Utils utils;//注入待测试的类
        @MockBean
        MockedStatic<LocalDate> localDateMockedStatic;
        
        @BeforeAll
        void setUp() {
            localDateMockedStatic = mockStatic(LocalDate.class);//初始化静态类
        }
        
        @Test
        public void testGetCurrentDate() {
            LocalDate yearOf2000 = LocalDate.of(2000, 1, 1);
            localDateMockedStatic.when(
                    () -> LocalDate.now())
                    .thenReturn(yearOf2000);
            System.out.println(utils.getCurrentDate());
            assertEquals(2000, target.getCurrentDate().getYear());
        } 
    }
    

    打印结果

    main:2000-01-01
    

    测试通过,打印的日期是 2000-01-01。

    Mockito Mock 静态方法的弊端

    在实际应用 Mockito 对静态方法进行 Mock 的时候,发现在多线程的时候失效,问题在于mockStatic只对当前线程的调用有效。

     localDateMockedStatic = mockStatic(LocalDate.class);//初始化静态类
    

    下面看个例子:

    @Test
        public void testGetCurrentDate() {
         LocalDate yearOf2000 = LocalDate.of(2000, 1, 1);
            localDateMockedStatic.when(
                    () -> LocalDate.now())
                    .thenReturn(yearOf2000);
            System.out.println(Thread.currentThread().getName() + ":" + LocalDate.now()); 
            
         Thread thread = new Thread(() ->
         System.out.println(Thread.currentThread().getName() + ":" + LocalDate.now()));
         thread.start();
         thread.join();
    }
    

    打印结果:

    main:2000-01-01
    Thread-0:当前时间。
    

    关注公众号 HEY DATA,一起交流更多 。

    相关文章

      网友评论

          本文标题:静态方法单元测试

          本文链接:https://www.haomeiwen.com/subject/fibggltx.html