2017-11-29 11 views
0

モックオブジェクトを返すためにgetInstance()をモックする必要があるシングルトンクラスのSvnPluginがあります。しかし、それは嘲笑されていません。私はPowermockとEasymockを使用しています。続きシングルトンクラスが嘲笑されない

はそれを嘲笑する必要があるのサンプルコードは、私は私が間違っているのかを理解することができません

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

ある

@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);  
} 

私のテストコードです。

答えて

1

簡単な答えは、Powermockランナーが必要なことです。

が十分であるため、実際にはnewをモックする必要はありません。

Powermockで作成されたモックを正当化するSVNPluginが最終的だと仮定しました。だから私はこの実装で試しました。

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); 
    } 
} 
関連する問題