【问题标题】:PowerMock - Singleton Instance testPowerMock - 单例实例测试
【发布时间】:2017-10-30 08:26:55
【问题描述】:
public Data extraMethod(Data data) // interface Data
{
    Data d = Singleton.getInstance().sort(data.get() , "desc");
    //do something, logical
    return d;
}

如何模拟对象 Data(单例额外返回结果),类 Singleton 有一个静态方法 getInstance 并且没有公共构造函数。我要测试逻辑部分,测试extraMethod不带数据排序操作。

【问题讨论】:

  • 您是否尝试模拟 Singleton.getInstance() 以使其返回您选择的对象?

标签: java junit mockito powermock powermockito


【解决方案1】:

如果你想监视你的测试类并创建一个包级别的方法来返回Singleton,你可以不用PowerMock。 您仍然需要设置调用 sort 方法时应该发生的情况:

1) 被测类

public Data extraMethod(Data data) // interface Data
{
    Data d = getSingleton().sort(data.get() , "desc");
    //do something, logical
    return d;
}

Singleton getSingleton(){
   return Singleton.getInstance();
}

2)测试

@Spy
private MyClass myClassSpy = new MyClass();

@Mock
Singleton singletonStub;

@Mock
Data dataStub;

@Before
public void init(){
    MockitoAnnotations.initMocks(this);
}

@Test
public void test() throws Exception{
  // Arrange
  doReturn(singletonStub).when(myClassSpy).getSingleton();
  when(dataStub.get()).thenReturn(...);
  when(singletonStub.sort(any(Data.class), "desc")).thenReturn(/* some data*/);

  // Act and Assert        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多