当前位置: 首页 > 知识库问答 >
问题:

如何使用powermock存根即时对象

薛弘厚
2023-03-14

是否有可能使用Powermock存根即时对象?Powermock能够模拟最终/静态类/方法。

我想要的是:

Instant instant = PowerMockito.mock(Instant.now().getClass());
when(instant.getEpochSecond()).thenReturn(76565766587L);

我需要这种嘲弄在我的服务类中的其他地方使用,在那里我插入到表格中给出那个瞬间的时间。

提前谢谢!!

共有2个答案

师曦
2023-03-14

你可以这样做

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.boot.test.context.SpringBootTest;
import ru.apibank.delivery.service.publisher.runners.PowerMockTestRunner;

import java.time.Instant;

@SpringBootTest
@RunWith(PowerMockTestRunner.class)
@PrepareForTest(value = {Instant.class})
public class TestClass {

    @Test
    public void testInstant() {
        long epochSeconds = 76565766587L;
        Instant instant = Instant.ofEpochSecond(epochSeconds);

        PowerMockito.mockStatic(Instant.class);
        Mockito.when(Instant.now()).thenReturn(instant);

        Assert.assertEquals(epochSeconds, Instant.now().getEpochSecond());
    }
}

您也可以使用BDDMockitoBDDMockito.given(Instant.now()). will返回(即时);

魏宸
2023-03-14

是的,是的。

我的依赖:

     <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-module-junit4</artifactId>
         <version>2.0.4</version>
         <scope>test</scope>
     </dependency>
     <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
      </dependency>
       <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.28.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-core</artifactId>
            <version>2.0.4</version>
            <scope>test</scope>
      </dependency>

还有我的JUnit:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Instant.class})
public class InstantTest {

    public InstantTest() {
    }

    private Instant mock;

    @Before
    public void setUp() {
        PowerMockito.mockStatic(Instant.class);
        mock = PowerMockito.mock(Instant.class);
        PowerMockito.when(Instant.now()).thenReturn(mock);
    }

    @Test
    public void test() {
        Mockito.doReturn(76565766587L).when(mock).getEpochSecond();
        assertEquals(76565766587L, Instant.now().getEpochSecond());
    }
}

这段代码可以工作,但IMHO insert into table是关于集成测试,而不是单元测试,所以您需要一个嵌入式或testcontainers数据库和一个往返测试,在这里您可以真正编写数据并再次读取数据。

 类似资料:
  • 问题内容: 使用Meteor,我试图了解何时使用服务器端,同时仍保留即时UI更新。 在Andrew Scala的入门教程中,他声称当您要更新和修改数据库文档时应使用: 这个想法是,您定义服务器上所有执行危险操作(如修改和更新数据)的功能,然后让客户端调用这些功能并获得返回值(如常规功能)。客户永远不会看到实现,也不会亲自修改数据。服务器完成所有工作。 并遵循此建议,我在代码中实现了这一点: 服务器

  • 如果我已经通过< code > var a = sinon . createstuinstance(my contractor)创建了一个实例。 如何替换其中一个存根函数,如 。 我这样做的主要原因是想实现这个提到的多个回调解决方法

  • 问题内容: 在Mockito 文档和javadocs中,它说 建议将ArgumentCaptor用于验证,但不能用于存根。 但我不明白如何将ArgumentCaptor用于存根。有人可以解释上面的陈述并显示ArgumentCaptor如何用于存根或提供显示其完成方式的链接吗? 问题答案: 假设使用以下方法进行测试: 文档的Mockito说,你应该 不 以这种方式使用的捕手: 因为您只能在存根期间使

  • 我有一个带有私有方法的类,该方法调用一些外部类并执行它,如果不使用powermock,我如何防止这种情况发生?(该项目使用Junit5,目前还不支持powermock)。 我考虑过将这些函数移到外面,但我觉得有时方法确实属于特定的类,因为它们是它的一部分,将它们移出对我来说没有意义,下面只是一个例子来说明。 我已经知道大多数人会说不要测试私有方法,但a.我不完全同意,b.我不想在这里测试这个方法,

  • 当在eclipse中运行一个junit4测试案例时,它作为一个独立的应用程序运行得很好,我得到以下堆栈跟踪。 我的测试用例使用了以下注释 我如何告诉它忽略URLClasLoader?

  • 我需要卸载一个静态方法 public TestESMock()引发ConfigurationException{ 有人能告诉我怎么做吗。