java assert false_Java / JUnit-AssertTrue与AssertFals

Java / JUnit-AssertTrue与AssertFals

我是Java的新手,并且正在关注Eclipse Total Beginner的教程。 它们都很有帮助,但是在第12课中,他将assertTrue用于一个测试用例,将assertFalse用于另一个测试用例。 这是代码:

// Check the book out to p1 (Thomas)

// Check to see that the book was successfully checked out to p1 (Thomas)

assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message

assertEquals("Thomas", b1.getPerson().getName());

assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message

assertEquals("Book was already checked out", m1.checkOut(b1,p2));

我已经搜索了有关这些方法的好的文档,但没有发现任何东西。 如果我的理解是正确的,则当第二个参数的值为false时,assertTrue和assertFalse会显示字符串。 如果是这样,那么将它们都包含在什么地方呢?

编辑:我想我看到了什么让我感到困惑。 作者可能只是为了展示它们的功能而将它们放在其中(毕竟这是一个教程)。 然后他设置了一个失败的消息,以便将消息打印出来并告诉我为什么失败了。 开始变得更有意义了……我认为这是解释,但我不确定。

7个解决方案

107 votes

如果第二个参数的计算结果为false,则assertTrue将失败(换句话说,它确保该值为true)。 assertFalse则相反。

assertTrue("This will succeed.", true);

assertTrue("This will fail!", false);

assertFalse("This will succeed.", false);

assertFalse("This will fail!", true);

与许多其他事情一样,熟悉这些方法的最好方法是尝试:-)。

Matt Solnit answered 2020-01-27T14:07:56Z

29 votes

您的理解是不正确的,在这种情况下总是请教JavaDoc。

断言错误

condition

断言条件为假。 如果不是,它将在给定的消息中引发AssertionError。

参数:

condition-AssertionError的标识消息(null好的)

condition-要检查的条件

nephewtom answered 2020-01-27T14:08:42Z

10 votes

关键是语义。 在assertTrue中,您断言该表达式为true。 如果不是,则它将显示该消息,并且断言将失败。 在assertFalse中,您断言一个表达式的计算结果为false。 如果不是,则显示该消息,并且断言失败。

assertTrue (message, value == false) == assertFalse (message, value);

这些在功能上是相同的,但是如果期望值是假的,则使用assertFalse。如果期望值是真,则使用assertTrue。

Xetius answered 2020-01-27T14:09:09Z

9 votes

我认为这只是为了您的方便(以及您的代码读者)

理想情况下,您的代码和单元测试应该是自我记录的文件,该API可以帮助您进行自我记录,

考虑一下更清晰的内容:

AssertTrue(!(a > 3));

要么

AssertFalse(a > 3);

当您在测试突然失败后的xx个月后打开测试时,您将花费更少的时间来了解第二种情况出了什么问题(我认为)。 如果您不同意,则在所有情况下都可以始终坚持使用AssertTrue :)

tdobek answered 2020-01-27T14:09:47Z

7 votes

您对这些方法的第一反应对我来说很有趣。 我将在以后的论点中使用它,因为assertTrue和assertFalse都不是最友好的工具。 如果你会用

assertThat(thisOrThat, is(false));

它更具可读性,并且还能打印出更好的错误消息。

iwein answered 2020-01-27T14:10:12Z

2 votes

如果检查的值为false,则assertTrue将失败,而如果检查的值为true,则assertFalse将相反:

另一件事,您的最后一个assertEquals很可能会失败,因为它将把“ Book is check out”字符串与m1.checkOut(b1,p2)的输出进行比较。 它需要第三个参数(用于检查是否相等的第二个值)。

bashflyng answered 2020-01-27T14:10:37Z

2 votes

该课程包含一个逻辑错误:

assertTrue("Book check in failed", ml.checkIn(b1));

assertFalse("Book was aleready checked in", ml.checkIn(b1));

在第一个断言中,我们期望checkIn返回True(因为checkin成功)。 如果失败,我们将打印一条消息,例如“书签入失败。现在在第二个断言中,我们期望checkIn失败,因为该书已经在第一行中被签入。 因此,我们期望checkIn返回False。 如果由于某种原因签入返回True(我们不希望),则该消息永远不应为“ Book has been check in”,因为签入成功。

Ronald Mos answered 2020-01-27T14:11:02Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值