2013-01-22 56 views
1

我正在使用Robolectric在Android應用上執行單元測試。 問題很簡單:我可以使用findViewById獲取我的Button,但調用方法performClick()方法或Robolectric.clickOn()將返回false。Robolectric:findViewById給出視圖,但performClick()返回false

但是按鍵完美的作品,通過應用程序或Robotium單元測試,測試......

這裏是測試代碼未通過:

@RunWith(RobolectricTestRunner.class)  
public class RegisterActivityTest { 

private MainActivity mainActivity; 
private LoginActivity loginActivity; 

@Before 
public void setUp(){ 
    mainActivity=new MainActivity(); 
    mainActivity.onCreate(null); 
    mainActivity.setContentView(R.layout.main); 
    } 

@Test 
public void testButton() throws Exception { 
    Button buttonPayment=(Button)mainActivity.findViewById(R.id.btn_payment); 
    assertNotNull(buttonPayment); // will pass test (---> the view is a button and exists) 
    assertTrue(buttonPayment.performClick()); // raise AssertionError 
    assertTrue(Robolectric.clickOn(buttonPayment)); // raise AssertionError as well 
    } 
} 

謝謝大家。

保羅

+0

我很好奇爲什麼你打電話onCreate,然後setContentView(R.layout.main)?你的onCreate不應該這樣調用? –

+0

你是絕對正確的,這個電話是無用的。只是我有幾個錯誤,所以不同嘗試修復performClick()問題。我現在刪除它 – user1987343

+0

好的馬特沃爾夫顯然問題來自雙重調用,導致現在斷言通過。非常感謝 ! – user1987343

回答

1

the documentation for performClick(),如果您分配了一個OnClickListener給該按鈕的方法將返回true。

...是嗎?

+0

是的,因爲點擊通過了應用程序(我也仔細檢查了代碼,並且確實我做了一個button.setOnClickListener())但是,感謝您的幫助! – user1987343

+0

你可以發佈你的'onCreate()',或者'setOnClickListener()'嗎?當你有時候回覆。 –

+0

現在問題解決了,我沒有用。這是一個簡單的意圖開始一項新的活動......感謝您的幫助。 – user1987343

1

通常,您可以在onCreate方法中調用setContentView。因此,setUp方法中對setContentView的調用是多餘的,可能會導致問題。

相關問題