2016-06-16 29 views
0

私は例えばoracle.adf.share.security.identitymanagement.UserProfileのモックを作成しようとしてきた時に例外をスローするクラスをからかっJMockit初期

@Test 
public void testMyTest(@Mocked final UserProfile userProfile) { 
    new Expectations() { 
     { 
      userProfile.getBusinessEmail(); 
      result = "[email protected]"; 
     } 
    }; 

    unitUnderTest.methodUnderTest(); 
} 

私は何をしかし見つけてることJMockitをしようとしたときに例外がスローされるということです私はそれがこの

public class UserProfile implements Serializable { 
    ... 
    private static UserManager _usrMgr = new UserManager(); 
    ... 
} 
のようなものを持って見ることができます逆コンパイル UserProfile後モック

java.lang.ExceptionInInitializerError 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at oracle.jdevimpl.junit.runner.junit4.JUnit4Testable.run(JUnit4Testable.java:24) 
    at oracle.jdevimpl.junit.runner.TestExecution.run(TestExecution.java:27) 
    at oracle.jdevimpl.junit.runner.JUnitTestRunner.main(JUnitTestRunner.java:88) 
Caused by: oracle.adf.share.security.ADFSecurityRuntimeException: EXC_FAILED_ID_STORE 
    at oracle.adf.share.security.identitymanagement.UserManager.<init>(UserManager.java:111) 
    at oracle.adf.share.security.identitymanagement.UserManager.<init>(UserManager.java:83) 
    at oracle.adf.share.security.identitymanagement.UserProfile.<clinit>(UserProfile.java:62) 

を構築の

UserManagerコンストラクタはADFSecurityUtil.getIdentityManagementProviderClassName();が呼び出されたときに今、私は何かを返すように期待を設定することができ、この

public UserManager() { 
    this((String) null); 
} 

public UserManager(String providerClassName) { 
    if (providerClassName != null) { 
     ... 
    } else { 
     String clzName = ADFSecurityUtil.getIdentityManagementProviderClassName(); 
     if (clzName != null) { 
      IdentityManagement provider = (IdentityManagement) createObject(clzName); 
      setIdentityManagementProvider(provider); 
     } else { 
      throw new ADFSecurityRuntimeException("EXC_FAILED_ID_STORE"); 
     } 
    } 
} 

のように見えるが、それは、このクラスをロードしようとしたとき、私は、さらに問題を予見します。

この問題を解決するにはどうすればよいですか?

+0

ベストソリューションは、もちろん、UserProfileクラスを模倣しないことです。必要な "businessEmail"値をインスタンス化して設定できない理由はありますか? –

+0

'Oracle ADF'のセキュリティ設定が行われている実行中のコンテナを必要とする' UserManager'スタティックで同じ問題が発生するので – PDStat

答えて

1

私は解決策を見つけることができたので、偽!ここで私は何をしたのですか?

@Test 
public void testMyTest() { 
    new Mockup<UserProfile>() { 
     @Mock 
     public void $cinit() { 
      // do nothing 
     } 

     @Mock 
     public String getBusinessEmail() { 
      return "[email protected]"; 
     } 
    }; 

    unitUnderTest.methodUnderTest(); 
}