[英]Cannot resolve method 'assertThat(int)'
我正在關注具有以下測試的測試導航文檔:
@RunWith(AndroidJUnit4.class)
public class TitleScreenTestJava {
@Test
public void testNavigationToInGameScreen() {
// Create a TestNavHostController
TestNavHostController navController = new TestNavHostController(
ApplicationProvider.getApplicationContext());
// Create a graphical FragmentScenario for the TitleScreen
FragmentScenario<TitleScreen> titleScenario = FragmentScenario.launchInContainer(TitleScreen.class);
titleScenario.onFragment(fragment ->
// Set the graph on the TestNavHostController
navController.setGraph(R.navigation.trivia);
// Make the NavController available via the findNavController() APIs
Navigation.setViewNavController(fragment.requireView(), navController)
);
// Verify that performing a click changes the NavController’s state
onView(ViewMatchers.withId(R.id.play_btn)).perform(ViewActions.click());
assertThat(navController.currentDestination.id).isEqualTo(R.id.in_game);
}
}
首先,這給出了
無法解析符號“currentDestination”
經過一番挖掘,我找到了getCurrentDestination()
。 我還必須將id
更改為getId()
以修復類似的錯誤。
然后我得到
無法解析方法“assertThat(int)”
我應該導入哪個版本的assertThat()
? 我在 JUnit 中找到了2 個版本,但都只接受一個參數。 此外,兩者都已棄用。 org.hamcrest.MatcherAssert
有 3 個版本的assertThat()
,但同樣,沒有一個采用單個int
或Integer
參數。 那么我在哪里可以找到正確版本的assertThat()
呢?
除此之外,我似乎需要所有這些更改來修復官方 android 文檔中的示例,我在這里缺少什么? 或者這個例子壞了?
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.22.0</version>
<scope>test</scope>
</dependency>
AssertJ 是一個 Java 庫,它提供了豐富的斷言集和真正有用的錯誤消息,提高了測試代碼的可讀性,並且被設計為超級易用
// basic assertions
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron);
更新:
我更深入地審查了 android 文檔。 看起來像使用了Truth 庫( Maven repo )。
根據 android 文檔和建議,Truth 是首選庫。 它是 Jetpack 文檔的一部分。
Jetpack 是一套庫,可幫助開發人員遵循最佳實踐、減少樣板代碼並編寫可跨 Android 版本和設備一致工作的代碼,以便開發人員可以專注於他們關心的代碼。
請參閱正確導入的測試示例。 Git
關於assertThat(Integer)的文檔
不屬於 Truth 項目本身的其他擴展包括:
- 用於測試 Android 類型的 AndroidX 測試,例如 Intent
// Assertions
androidTestImplementation "androidx.test.ext:junit:$testJunitVersion"
androidTestImplementation "androidx.test.ext:truth:$truthVersion"
真相與 AssertJ
Truth 和 AssertJ 非常相似。 這就提出了一個問題:我們為什么要創造真理? 原因是歷史性的:當我們啟動 Truth 時,AssertJ 還不存在。 在創建它時,我們已經開始將 Google 代碼遷移到 Truth,並且我們做出了一些難以 retrofit 到 AssertJ 的設計決策。
使用“assert”而不是“assertThat”。
private static boolean getBool(int i) { return i == 0; }
public static void main(String[] args) {
// assert false; !will throw error
assert true;// nothing will happen
assert getBool(0);
// assert getBool(1); !will throw error
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.