2017-02-28 92 views
1

我已經在我的android應用程序上實現了MVP,並且正在創建測試腳本來測試基本行爲功能。長話短說,有沒有辦法讓我創建的陰影對象的實例?Robolectric 3.2.2獲取影子類的實例?

我希望能夠告訴模擬模型對象在方法中返回什麼,例如,當調用getGender()時,返回Male,但對於另一種方法,getGender()將返回Female。

我現在已經找到了,但我很幸運,模型的設計。這是測試:

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 22, shadows = { GenderPreferenceInteractorShaddow.class }) 
public class newPreferenceBehaviourTest { 


    @Test 
    public void clickingLogin_shouldStartLoginActivity() { 
     NewPreferenceMobileActivityTest activity = Robolectric.setupActivity(NewPreferenceMobileActivityTest.class); 
     activity.setGender(Gender.MALE); 

     activity.findViewById(R.id.femaleImageButton).performClick(); 
     activity.findViewById(R.id.positiveButton).performClick(); 
    } 


} 

模型構造也需要上下文的結構,這樣我就可以創建一個測試活動,延伸我想測試活動。

public class NewPreferenceMobileActivityTest extends NewPreferenceMobileActivity { 
    public Gender getGender() { 
     return gender; 
    } 

    public void setGender(Gender gender) { 
     this.gender = gender; 
    } 

    private Gender gender; 
} 

這個新的模型將包含一個getter和setter爲我想改變的值。在陰影對象的構造,我可以投背景的測試活動,然後嘲笑模型的吸能回到我想要的東西:

@Implements(GenderPreferenceInteractor.class) 
public class GenderPreferenceInteractorShaddow { 


    private NewPreferenceMobileActivityTest newPreferenceMobileActivityTest; 
    private GenderPreferenceMVP.onFinished onFinished; 

    public void __constructor__ (Context context) { 
     newPreferenceMobileActivityTest = (NewPreferenceMobileActivityTest) context; 
    } 

    @Implementation 
    public void saveGender(Gender gender) { 
     onFinished.onSaveSuccess(true); 
    } 

    @Implementation 
    public Gender getGender() 
    { 
     return newPreferenceMobileActivityTest.getGender(); 
    } 

} 

編輯 - >不可能的,但有一個變通。在GenderPreferenceInteractorShaddow類中,將引用傳遞迴NewPreferenceMobileActivityTest類,並且我們有對該類的引用。

public void __constructor__ (Context context) { 
     newPreferenceMobileActivityTest = (NewPreferenceMobileActivityTest) context; 
     newPreferenceMobileActivityTest.setGenderPreferenceInteractorShaddow(this); 
    } 


public class NewPreferenceMobileActivityTest extends NewPreferenceMobileActivity { 

    private GenderPreferenceInteractorShaddow genderPreferenceInteractorShaddow; 

    public ladenzeile.android.newPreference.GenderPreferenceInteractorShaddow getGenderPreferenceInteractorShaddow() { 
     return genderPreferenceInteractorShaddow; 
    } 

    public void setGenderPreferenceInteractorShaddow(ladenzeile.android.newPreference.GenderPreferenceInteractorShaddow genderPreferenceInteractorShaddow) { 
     this.genderPreferenceInteractorShaddow = genderPreferenceInteractorShaddow; 

一個缺點,這是你需要的性別變量設置爲默認值

回答

2

您可以使用ShadowExtractor這樣的:

GenderPreferenceInteractorShaddow shadowGender = (GenderPreferenceInteractorShaddow) ShadowExtractor.extract(genderPreferenceInteractor); 
+0

嘿史蒂夫,我沒有對GenderPreferenceInteractor類的引用,該實例化在片段中完成,並且我無法訪問該對象。 – Killesk

+1

如果您無法訪問交互器,則必須使用Mockito等庫來模擬交互器。例如:https://medium.com/@Miqubel/testing-android-mvp-aa0de6e165e4#.aofbudlpr –