在软件测试的课上,老师介绍了闰年测试。闰年测试旨在检测某一年份是否为闰年,计算方式为四年一闰,百年不闰,四百年再闰。使用安卓实现这个小程序。
界面代码如下:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 6 tools:context="${relativePackage}.${activityClass}" > 7 8 <TextView 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:layout_centerHorizontal="true" 12 android:text="@string/hello_world" /> 13 14 <EditText 15 android:id="@+id/editText" 16 android:layout_width="fill_parent" 17 android:layout_height="wrap_content" 18 android:layout_marginTop="23dp" 19 android:ems="10" 20 android:hint="@string/hint" 21 android:lines="1" 22 > 23 </EditText> 24 25 <Button 26 android:id="@+id/button" 27 android:layout_width="wrap_content" 28 android:layout_height="wrap_content" 29 android:layout_below="@+id/editText" 30 android:layout_centerHorizontal="true" 31 android:text="@string/bt" /> 32 33 </RelativeLayout>
结果如下:
在我的程序中,使用Integer.parseInt的方法获取editText中输入的年份。在没考虑非法字符的情况下,输入特殊字符而非年份。程序停止运行。
在android ADT的logcat中,可以看到程序运行的日志:
String转化为int类型失败。考虑非法字符,即输入年份不合法,无法转换成String类型,使用try,catch截获错误,最终代码如下
1 package com.leap.leapyear; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Gravity; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 import android.widget.EditText; 10 import android.widget.Toast; 11 12 public class MainActivity extends Activity { 13 private EditText mEditText; 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 20 Button button = (Button) this.findViewById(R.id.button); 21 mEditText = (EditText) MainActivity.this.findViewById(R.id.editText); 22 23 button.setOnClickListener(new OnClickListener() { 24 @Override 25 public void onClick(View v) { 26 String number = mEditText.getText().toString(); 27 checkLeap(number); 28 } 29 }); 30 } 31 32 private void checkLeap(String number) { 33 34 int messageResId = R.string.false_toast; 35 36 try { 37 int year = Integer.parseInt(number); 38 39 if (year % 4 == 0) { 40 messageResId = R.string.true_toast; 41 } 42 if (year % 100 == 0) { 43 messageResId = R.string.false_toast; 44 } 45 if (year % 400 == 0) { 46 messageResId = R.string.true_toast; 47 } 48 } 49 catch (Exception e) { 50 messageResId = R.string.illegal_toast; 51 } 52 53 Toast toast = Toast.makeText(this, messageResId, Toast.LENGTH_SHORT); 54 toast.setGravity(Gravity.CENTER, 0, 0); 55 toast.show(); 56 } 57 }
使用测试用例进行测试
有效等价类:被4整除而且不被100整除或可以被400整除
无效等价类:其他年份,非法字符,空
测试结果如下
测试结果:
其他:
有更简单的问题解决办法,在输入框<EditText/>下加一行android:inputType="number",限制输入为数字,测试发现点击输入框输入法自动切换为数字输入,而且无法输入除数字以外的字符。如下: