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;
一個缺點,這是你需要的性別變量設置爲默認值
嘿史蒂夫,我沒有對GenderPreferenceInteractor類的引用,該實例化在片段中完成,並且我無法訪問該對象。 – Killesk
如果您無法訪問交互器,則必須使用Mockito等庫來模擬交互器。例如:https://medium.com/@Miqubel/testing-android-mvp-aa0de6e165e4#.aofbudlpr –