java - 在 junit 5 中测试类中的 stub 私有(private)方法,PowerMock 不适用于 JUnit5

标签 java mockito junit5

我想在被测类中 stub 一个私有(private)方法。我正在使用 junit 5。我之前使用过 powermock 来实现这一点。不幸的是,junit 5 不适用于 powermock

我已经简化了示例以更好地解释问题。我的类具有在公共(public)方法中调用的私有(private)辅助方法。如下所示:

public class Service {
    private Repository repository;

    public Object findById(String id) {
        Object object = repository.findById(id);
        object = verify(object);
        return object;
    }

    private Object verify(Object object) {
        //removed for simplicity
        return object;
    }
}

现在我想对 Service 的方法 findById 进行单元测试。我使用带有 mockito 的 junit 5 来​​实现服务类的单元测试。

public class ServiceUTest {
    @InjectMocks
    private Service service;
    @Mock
    private Repository repository;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testFindById() {
        when(repository.findById(Mockito.any())).thenReturn(new Object());
        //how to stub verify method
    }
}

对于解决此问题的任何帮助和指导,我将不胜感激。

问候,

最佳答案

您可以监视服务并使用 PowerMockito 来定义 verify() 方法的行为。

public class ServiceUTest {

    @InjectMocks
    private Service service;

    @Mock
    private Repository repository;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testFindById() {
        // Arrange
        Service spyService = spy(service);
        when(repository.findById(Mockito.any())).thenReturn(new Object());
        PowerMockito.when(spyService, "verify", any()).thenReturn(expectedObjectReturn);

        // Act
        Object actual = spyService.findById("id");

        // Assert
    }
}

关于java - 在 junit 5 中测试类中的 stub 私有(private)方法,PowerMock 不适用于 JUnit5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62093143/

相关文章:

java - 套接字超时异常 : Read timed out

java - 如何在 JFace Table Viewer 中监听复选框

java - 我怎么知道是否在被测单元上调用了方法?

java - 返回 NullPointerException 的模拟方法

java - NoSuchMethodError : org. junit.platform.commons.util.ReflectionUtils.tryToLoadClass

java - Gson 到 json 字符串转换

java - 模拟 Locale.forLanguageTag

java - 如何使用 JUnit 5 为项目中的所有测试初始化​​基类中的静态资源?

java - 如何使用 JUnit5 测试抽象接口(interface)?

java - 我有两张 Bitmap 格式的图片,我想将一张透明度为 50% 的图片叠加在另一张上