2

我已经在我的 android 应用程序上实现了 MVP,并且正在考虑创建测试脚本来测试基本行为功能。长话短说,有没有办法获取我创建的阴影对象的实例?

我希望能够告诉模拟模型对象在方法中返回什么,例如,当调用 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。在影子对象的构造函数中,我可以将上下文转换为测试活动,然后模拟模型的 getter 可以返回我想要的:

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

这样做的缺点是您需要将 Gender 变量设置为默认值

4

1 回答 1

3

你可以像这样使用 ShadowExtractor:

GenderPreferenceInteractorShaddow shadowGender = (GenderPreferenceInteractorShaddow) ShadowExtractor.extract(genderPreferenceInteractor);
于 2017-02-28T09:05:49.993 回答