[英]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.