Tag: 断言

JUnit:在被测试的类中启用断言

我已经在JUnit测试套件中没有失败的Java assert语句多次,因为在JUnit的JVM实例中没有启用断言。 要清楚,这些是实现中的“黑盒子”断言(检查不变量等),而不是JUnit测试本身定义的断言。 当然,我想在测试套件中捕获任何这样的断言失败。 显而易见的解决方案是每次运行JUnit时都要非常小心地使用-enableassertions ,但我更喜欢更强大的解决方案。 一种替代方法是将以下测试添加到每个测试类: @Test(expected=AssertionError.class) public void testAssertionsEnabled() { assert(false); } 有没有更自动的方法来实现这一目标? JUnit的系统范围配置选项? 我可以在setUp()方法中进行动态调用吗?

将null传递给方法

我正在阅读优秀的清洁代码 一个讨论是关于将null传递给方法。 public class MetricsCalculator { public double xProjection(Point p1, Point p2) { return (p2.x – p1.x) * 1.5; } } … calculator.xProjection(null, new Point(12,13)); 它代表了处理这个问题的不同方法: public double xProjection(Point p1, Point p2) { if (p1 == null || p2 == null) { throw new IllegalArgumentException(“Invalid argument for xProjection”); } return (p2.x – p1.x) * 1.5; […]

禁用时Java断言的性能拖累

代码可以使用其中的断言进行编译,并且可以在需要时激活/取消激活 。 但是,如果我部署一个带有断言的应用程序并且那些被禁用,那么在那里被忽略的惩罚是什么?

与Java的断言不同,Groovy是否对生产代码提出了一个好主意?

在Java中,已知使用assert关键字通常是一个坏主意,因为它的行为依赖于运行时环境(默认情况下它不会执行任何操作,除非将-enableassertion传递给java运行时)。 Groovy的主张是不同的吗? 它总是在生产代码中执行,是否建议在生产代码中使用? (在Java中你会使用像Preconditions这样的东西) 从我的健全性测试来看,似乎默认情况下assert没有任何标志的情况下运行良好,并且它实际上比Java关键字更强大(参见Power Assert ) – 我只是在寻找官方/完整的答案,而不是我的轶事一。

在java中使用AssertionError和断言

我以标准方式在Java中使用断言,在我的IDE中打开它们。 所以他们不是生产发布的一部分。 最近我一直看到throw new AssertionError()代码示例,我开始考虑应该使用AssertionError而不是断言的情况。 我的猜测主要区别在于断言的可选性,因此它们不会降低生产性能,因此它们可以在代码中经常出现,但修复用户报告的难以再现的错误则更难。 对于AssertionError ,恰恰相反。 我还发现AssertionError在执行不应该得到的代码中更实用,而不是使用assert false //We should not be here 。 特别是如果需要返回值。 例如: int getFoo(AnEnum a){ if (a == AnEnum.ONE) return bar(); else if (a == AnEnum.TWO) return SOME_VALUE; //else assert false; //throw new AssertionError(); return -1; //not necessary when usin AssertionError } 我的推理是否正确? 这两种方法的其他差异/用例/最佳实践/限制是什么? 关于在AssertionError提供描述 – 是应该提供还是仅仅是一个Error (和断言类型)的事实足以或多或少地确定在发现错误的情况下将提供堆栈跟踪?

Java声明断了吗?

在探讨问题时,我最近在Java中发现了assert关键字。 起初,我很兴奋。 我还不知道有用的东西! 一种更有效的方法来检查输入参数的有效性! 耶老师! 但后来我仔细研究了一下,我的热情并没有像一个简单的事实那样“完全被扼杀”而变得“脾气暴躁”:你可以关闭断言。* 这听起来像是一场噩梦。 如果我断言如果输入listOfStuff为null ,我不希望代码继续运行,为什么我想要忽略该断言呢? 听起来好像我正在调试一段生产代码并怀疑listOfStuff可能错误地传递了null但是没有看到任何触发该断言的日志文件证据,我不能相信listOfStuff实际上已经发送了一个有效的值; 我还必须考虑断言可能完全被关闭的可能性。 这假设我是调试代码的人。 不熟悉断言的人可能会看到并且(非常合理地)假设如果断言消息没有出现在日志中,则listOfStuff可能不是问题。 如果你第一次遇到assert是在野外,你甚至会发现它可以完全被关闭吗? 毕竟,它不像是一个允许你禁用try / catch块的命令行选项。 所有这些都让我想到了我的问题(这是一个问题,而不是一个咆哮的借口!我保证!): 我错过了什么? 是否有一些细微差别使得Java的assert实现远比我给它的功劳更有用? 在某些情况下,从命令行启用/禁用它的能力实际上是非常有价值的吗? 当我设想在生产代码中使用它来代替if (listOfStuff == null) barf();等语句时,我是否误解了它if (listOfStuff == null) barf(); ? 我觉得这里有一些重要的东西,我没有得到。 *好的,从技术上讲,它们实际上是默认关闭的; 你必须不遗余力地打开它们。 但是,你仍然可以完全击败他们。 编辑:启蒙要求,启示收到。 assert首先是一个调试工具的概念需要很长时间才能使它对我有意义。 我仍然认为应该在生产环境中禁用输入检查非平凡私有方法的概念,因为开发人员认为不可能输入错误。 根据我的经验,成熟的生产代码是一种疯狂的,庞大的东西,多年来由具有不同技能的人们开发,其目标是快速变化的不同程度的理智要求。 即使糟糕的输入确实是不可能的,从现在起六个月后的一段邋maintenance的维护编码也可以改变这一点。 提供的链接gustafc (谢谢!)包括这个例子: assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval; 禁用如此简单的生产检查让我感到愚蠢乐观。 然而,这是编码哲学的差异,而不是破碎的特征。 另外,我绝对可以看到这样的价值: […]

如何以编程方式启用断言?

如何以编程方式为特定类启用断言,而不是指定命令行参数“-ea”? public class TestAssert { private static final int foo[] = new int[]{4,5,67}; public static void main(String []args) { assert foo.length == 10; } }

你使用断言吗?

这不是一个“问题”所以我正在制作CW。 该 assert 关键字太棒了! 它应该让你觉得你的自己对你编写的代码更有信心,但是,直到今天我创建一个小型测试类(<20行)时,我才意识到自从它被引入以来从未使用它。 哎呀! 我几乎没有使用记录器,这确实非常有用,但直到今天我才意识到我不使用断言。 你使用断言吗? 如果不是,那是什么原因?

使用Selenium WebDriver和java检查该元素不存在的最佳方法

我尝试下面的代码,但似乎它不起作用…有人能告诉我最好的方法吗? public void verifyThatCommentDeleted(final String text) throws Exception { new WebDriverWait(driver, 5).until(new ExpectedCondition() { @Override public Boolean apply(WebDriver input) { try { input.findElement(By.xpath(String.format( Locators.CHECK_TEXT_IN_FIRST_STATUS_BOX, text))); return false; } catch (NoSuchElementException e) { return true; } } }); }

我何时应该使用Apache Commons的Validate.isTrue,何时应该使用’assert’关键字?

我何时应该使用Apache Commons的Validate.isTrue,何时应该使用’assert’关键字?