【问题标题】:Singleton class not getting mocked单例类没有被嘲笑
【发布时间】:2017-11-29 05:09:28
【问题描述】:

我有一个单例类 SvnPlugin,我需要模拟它的 getInstance() 以返回一个模拟对象。但它并没有被嘲笑。我正在使用 Powermock 和 Easymock。

以下是我的测试代码

@Test
@PrepareForTest({SVNPlugin.class})
public void createGlobalUSerTest() throws Exception{
    PowerMock.mockStatic(SVNPlugin.class);
    SVNPlugin svnPlugin=PowerMock.createMock(SVNPlugin.class);
    PowerMock.expectNew(SVNPlugin.class).andReturn(svnPlugin);      

    EasyMock.expect(SVNPlugin.getInstance()).andReturn(svnPlugin).anyTimes();
    EasyMock.expect(svnPlugin.getSynProject("", "", "", "")).andReturn(true);
    PowerMock.replay(SVNPlugin.class,svnPlugin);
    Future<RpcResult<CreateGlobalUserOutput>> 
       result=impl.createGlobalUser(getGLobalUser());
    PowerMock.verify(svnPlugin,SVNPlugin.class);
    Assert.assertNotNull(result);       
}

它需要模拟的示例代码是

SVNPlugin svnplugin = SVNPlugin.getInstance();
checkOutFlg = svnplugin.getSynProject(checkOutLocationAtLocal, svnPath , userName, passWord);

我无法理解我做错了什么。

【问题讨论】:

    标签: java unit-testing mocking powermock easymock


    【解决方案1】:

    快速回答是您需要 Powermock 跑步者。

    那么,实际上你不需要模拟new,因为模拟getInstance 就足够了。

    我假设 SVNPlugin 是最终的,这证明了使用 Powermock 创建的模拟是正确的。所以我尝试了这个实现。

    public final class SVNPlugin {
      public static SVNPlugin getInstance() {
        return new SVNPlugin();
      }
    
      private SVNPlugin() {}
    
      public boolean getSynProject(String s, String s1, String s2, String s3) {
        return false;
      }
    }
    

    以下测试运行良好。

    @RunWith(PowerMockRunner.class)
    public class SVNPluginTest {
    
      @Test
      @PrepareForTest(SVNPlugin.class)
      public void createGlobalUSerTest() throws Exception{
        PowerMock.mockStatic(SVNPlugin.class);
        SVNPlugin svnPlugin = PowerMock.createMock(SVNPlugin.class);
    
        EasyMock.expect(SVNPlugin.getInstance()).andStubReturn(svnPlugin);
        EasyMock.expect(svnPlugin.getSynProject("", "", "", "")).andReturn(true);
    
        PowerMock.replay(SVNPlugin.class,svnPlugin);
    
        SVNPlugin svnplugin = SVNPlugin.getInstance();
        boolean checkOutFlg = svnplugin.getSynProject("", "", "", "");
        assertTrue(checkOutFlg);
    
        PowerMock.verify(svnPlugin,SVNPlugin.class);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 2015-06-06
      • 2019-07-21
      • 1970-01-01
      • 2016-09-12
      • 2020-07-21
      • 2020-04-23
      相关资源
      最近更新 更多