gpt4 book ai didi

java - 模拟私有(private)构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:09 26 4
gpt4 key购买 nike

Site 类是由外部团队提供给我的,它有一个private 构造函数。

public class Site
{
int id;
String brand;

private Site(int id, String brand)
{
this.id = id;
this.brand = brand;
}
}

SiteUtil 类(由团队控制)是

public class SiteUtil
{
public static Site getSite()
{
Site site;
//Logic
return site;
}
}

getSite() 函数对其逻辑应用的数据需要网络调用,因此需要对其进行模拟。目前没有setter(可能是为了和数据源保持一致,不太确定)

我模拟如下

Site mockSite = new Site(1,"Google");
PowerMockito.when(SiteUtil.getSite(1)).thenReturn(mockSite);

上面的代码当然不会编译,因为我使用了公共(public)构造函数。我读到的解决方案是模拟 Site 对象的私有(private)构造函数。然而,我不知道该怎么做(第一次编写单元测试!)

最佳答案

假设您的代码仅通过 getter 访问 idbrand 的值,您可以简单地模拟您的类 Site 然后返回它当您调用静态方法 SiteUtil.getSite() 时进行模拟,如下所示:

// Use the launcher of powermock
@RunWith(PowerMockRunner.class)
public class MyTestClass {

@Test
// Prepare the class for which we want to mock a static method
@PrepareForTest(SiteUtil.class)
public void myTest() throws Exception{
// Build the mock of Site
Site mockSite = PowerMockito.mock(Site.class);
// Define the return values of the getters of our mock
PowerMockito.when(mockSite.getId()).thenReturn(1);
PowerMockito.when(mockSite.getBrand()).thenReturn("Google");
// We use spy as we only want to mock one specific method otherwise
// to mock all static methods use mockStatic instead
PowerMockito.spy(SiteUtil.class);
// Define the return value of our static method
PowerMockito.when(SiteUtil.getSite()).thenReturn(mockSite);

...
}
}

关于java - 模拟私有(private)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com