代码之家  ›  专栏  ›  技术社区  ›  user1652382

Android测试用例Junit3

  •  0
  • user1652382  · 技术社区  · 11 年前

    我正在尝试测试下一个代码:

    public class MessagerTest extends TestCase  {
    Messager mClassToTest;
    Context mArg1;
    String mArg2;
    protected void setUp() throws Exception {
         mClassToTest=new Messager();
         mArg1= getTestContext();
         mArg2= "5556";
        super.setUp();
    }
    
    protected void tearDown() throws Exception {
        super.tearDown();
    }
    
     public void testscreateConnection(){
         assertTrue(mClassToTest.createConnection(mArg1, mArg2));
     }
    
     public void testsadd()
     {
         assertEquals(11, mClassToTest.add(5, 6));
     }
    
     /**
      * @return The {@link Context} of the test project.
      */
     private Context getTestContext()
     {
         try
         {
             Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
             return (Context) getTestContext.invoke(this);
         }
         catch (final Exception exception)
         {
             exception.printStackTrace();
             return null;
         }
     }
     }
    

    我正在测试的代码是

    public boolean createConnection(Context context, String number)
    {
        DatabaseHandler db = new DatabaseHandler(context);
    
        contact = db.getContactByNumber(number);
        String id = String.valueOf(contact.getID());
    
        if(id.equals("0"))
        {
            // send message
            PendingIntent pi = PendingIntent.getActivity(context, 0,
                    new Intent(context, CreateConnection.class), 0);
    
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm",
                    Locale.UK);
    
            currentDateandTime = sdf.format(new Date());
    
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(number, null, "1|031|", pi, null);
    
            // add to db
            db.addContact(new Contact("", number, "", 
                    "", 2, "40", currentDateandTime)); 
    
            return true;
        }else{
            return false;
        }
    }
    

    出于某种原因,当我运行测试时 testscreateConnection ,在第一行似乎失败了 contact = db.getContactByNumber(number); 用一个 NullPointerException 。失败发生在函数的第一行 SQLiteDatabase db = this.getReadableDatabase();

    getContactByNumber代码:

     public Contact getContactByNumber(String number)
        {
            SQLiteDatabase db = this.getReadableDatabase();
    
            Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                    KEY_NAME, KEY_PH_NO, KEY_PUB_KEY, KEY_IDENTIFIER, KEY_DELETE,
                    KEY_STATUS, KEY_DATETIME }, KEY_PH_NO + "=?",
                    new String[] { number }, null, null, null,
                    null);
    
            if(cursor.getCount() > 0)
            {
                if(cursor != null)
                {
                    cursor.moveToFirst();
                }
    
                Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                        cursor.getString(1), cursor.getString(2), cursor.getString(3),
                        cursor.getString(4), Integer.parseInt(cursor.getString(5)),
                        cursor.getString(6), cursor.getString(7));
    
                // return contact
                return contact;
            }else{
                Contact contact = new Contact();
                return contact;
            }
        }
    

    我应该如何着手解决这个问题? 这让我觉得数据库在测试版本中不存在?

    1 回复  |  直到 7 年前
        1
  •  0
  •   D.J KENdi    7 年前

    必须更新测试用例中的第一行 TestCase ActivityTestCase 和上下文 mArg1= getInstrumentation().getTargetContext();

    public class MessagerTest extends ActivityTestCase  {
    Messager mClassToTest;
    Context mArg1;
    String mArg2;
    protected void setUp() throws Exception {
         mClassToTest=new Messager();
         mArg1= getInstrumentation().getTargetContext();
         mArg2= "5558";
        super.setUp();
    }