我正在跟踪Test Navigation docs名进行以下测试:

@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()的哪个版本?我找到了2 versionsin JUnit,但它们都只接受一个参数.此外,这两种方法都不推荐.org.hamcrest.MatcherAssert有3个版本的assertThat(),但同样地,没有一个采用单个intInteger参数.那么我在哪里可以找到正确的assertThat()版本呢?

除此之外,我在这里遗漏了什么?这些变化似乎需要我来修复官方android文档中的示例?还是这个例子被打破了?

推荐答案

这是AssertJ图书馆的.

<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);

参见documentation assertThat(int)

Update:


请参阅正确导入的example of test.Git
关于assertThat(Integer)的文档

AndroidX is an extension of Truth

其他不属于其中一部分的扩展

  • AndroidX测试用于测试Android类型,如Intent

Setup project with AndroidX

    // Assertions
    androidTestImplementation "androidx.test.ext:junit:$testJunitVersion"
    androidTestImplementation "androidx.test.ext:truth:$truthVersion"

Truth vs. AssertJ

真相和assets资源 非常相似.这就提出了一个问题:为什么要这么做

Java相关问答推荐

更新我们的一个文物后出现了严重的符号引用错误

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

嵌入式ActiveMQ Artemis Web控制台加载错误

Jakarta CDI强制bean构造/注册遗留事件侦听器

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

如何在Java记录中设置BigDecimal类型属性的精度?

在Java中将int[]矩阵添加到ArrayList中,但出现错误

将关闭拍卖的TimerService

一对多关系和ID生成

Domino中不同的java.Protocol.handler.pkgs设置在XPages Java中导致错误

找出承载Cargo 的最小成本

在打开搜索结果时,如何让Eclipse打开整个文件?

如果c不为null,Arrays.sort(T[]a,Comparator<;?super T>;c)是否会引发ClassCastException?

如何以事务方式向ibmmq发送消息

message.acknowledge()没有';在使用Spring Boot在ActiveMQ中读取消息后,t将消息出列

将天数添加到ZonedDateTime不会更改时间

无法转换 [Ljava.lang.Object;将 Object[] 传递给 Object... 可变参数

正在打印可选[值]