所以我尝试使用Robolectric来验证是否正确启动了点击按钮才能启动服务。但是,由于我使用了com.google.android.gms.common
包中的自定义视图,因此所有onClickListener似乎都无法正确绑定到SignInButton。以下是我的代码:
TestLoginActivity.java:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
public class TestLoginActivity {
private LoginActivity mActivity;
@Before
public void setup() {
mActivity = Robolectric.buildActivity(LoginActivity.class)
.create()
.visible()
.get();
}
@Test
public void testRegistrationServiceStarted() {
SignInButton signIn = (SignInButton) mActivity.findViewById(R.id.signup);
assertTrue(signIn != null);
assertTrue(signIn.hasOnClickListeners());
signIn.performClick();
Intent expectedGcm = new Intent(mActivity, RegistrationIntentService.class);
Intent actual = Shadows.shadowOf(mActivity).getNextStartedService();
assertEquals(expectedGcm, actual);
}
}
LoginActivity.java
public class LoginActivity extends Activity implements LoginView {
private static final String TAG = LoginActivity.class.getSimpleName();
@Bind(R.id.signup)
SignInButton mSignUp;
@Inject
LoginPresenter mLoginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_container);
getApplication().getComponent().inject(this);
ButterKnife.bind(this);
mLoginPresenter.setLoginView(this);
}
@OnClick(R.id.signup)
protected void onSignIn() {
mLoginPresenter.registerWithGcm(this);
}
}
assertTrue
上的signIn.hasOnClickListeners()
失败。但是,如果我使用常规Button
,则测试通过。我也试过包括testCompile 'org.robolectric:shadows-play-services:3.0'
,但这也没有用。
我应该如何继续测试这个组件?此外,我应该在Robolectric
项目上创建一个新问题吗?