0

我有一个新创建的 android-18 应用程序,该应用程序PreferenceScreen太明显且易于列出。

而且我还有一个自动化测试[固定将问题转换为答案]。

public class MyPreferenceTest extends ActivityUnitTestCase<MyPreference> {  
    Intent intent;
    MyPreference activity;

    public MyPreferenceTest() {
        super(MyPreference.class);
    }

    @Override
    protected void setUp() throws Exception {
        Context targetContext = getInstrumentation().getTargetContext();
        intent = new Intent(targetContext, MyPreference.class);
        super.setUp();
    }

    private void assembleActivity() {
        startActivity(intent, null, null);
        activity = getActivity();
    }

    private void assemblePreferences(String device, String userName, String password) {
        Context targetContext = getInstrumentation().getTargetContext();        
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(targetContext);
        SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("smart_phin_bluetooth_devices", device);
        editor.putString("username", userName);  
        editor.putString("password", password);  
        editor.commit();
    }

    public void test_empty_userNames_dont_reflect_into_the_summary() {
        assemblePreferences("", "", ""); 
        assembleActivity();
        activity.onResume();
        EditTextPreference userName = (EditTextPreference) activity.findPreference("username");  // FIXME  userName
        assertEquals("", userName.getEditText().getText().toString());
        assertEquals("", userName.getText());
        assertEquals("Enter your user name", userName.getSummary().toString());
    }

    public void test_full_userNames_reflect_into_the_summary() {
        assemblePreferences("", "BookerT", "");
        assembleActivity();

        activity.onResume();  //  We must call this bc Android does but the test rig does not...
        EditTextPreference userName = (EditTextPreference) activity.findPreference("username");
        assertEquals("username", userName.getKey());

        assertEquals("BookerT", String.valueOf(userName.getText().toString());
//        assertEquals("BookerT", userName.getEditText().getText().toString());
        assertEquals("BookerT", userName.getSummary().toString());
    }

}  // end of class MyPreferenceTest

注释掉的断言将失败,因为尚未调用该 EditText 视图。

测试现在检查 onResume() 中的新代码是否更新了通用语言的摘要以反映 Preference 的当前值。

4

1 回答 1

1

您的测试中有错误。

private void assemblePreferences(String device, String userName, String password)

请注意,此处的值顺序是device, userName, password

assemblePreferences("BookerT", "", "");

因此deviceBookerT,不是userName

于 2013-10-07T21:01:07.763 回答