TestNG中具有依赖性的奇怪行为 - 没有引发错误

时间:2016-03-01 12:45:24

标签: java testing error-handling dependencies testng

更新:我还在TestNG GitHub projecthere中打开了错误

在定义我的一个测试时,我犯了一个愚蠢的印刷错误。我不小心写了这样的注释:

@Test(dependsOnMethods = {"method1, method2"}, alwaysRun = true)

你看到错误吗?我确定没有(因为真正的方法名称也长得多),这让我浪费了近2个小时,因为TestNG提供了没有帮助

为何不提供帮助: 由于这个错误,没有错误被引发,所有编译都很好,但是当我的套件是关于运行时它只是跳过所有测试而没有任何指示原因:< / p>

__PLAN___
Total tests run: 0, Failures: 0, Skips: 0

在logs / xmls中也没有地方可以显示某些内容可能有误。

很长一段时间后,我注意到我打算写:

@Test(dependsOnMethods = {"method1", "method2"}, alwaysRun = true) 

意味着测试实际上取决于两种方法,除了一种显然不存在的长方法。

我现在正试图在我们的框架中添加一个提醒用户注意这种错误的选项,以便它不会再发生在任何人身上(我们是一家大公司)。

问题:在TestNG的代码中,我可以在哪里找到允许我抓取 TestNG 失败,并采取行动? 必须那里的某个地方,TestNG检查套件并决定不运行测试,因为这个问题,它在哪里?

1 个答案:

答案 0 :(得分:1)

忽略错误的原因是您在alwaysRun=true声明中指定了@Test。来自Test.java

/**
 * If set to true, this test method will always be run even if it depends
 * on a method that failed.  This attribute will be ignored if this test
 * doesn't depend on any method or group.
 */
public boolean alwaysRun() default false;

设置alwaysRun=false或完全从@Test声明中删除它应该会给您带来预期的错误。

要回答有关TestNG检查缺少的依赖关系的问题,请在MethodHelper.java#findDependedUponMethods(ITestNGMethod , ITestNGMethod[])中。如您所见,将alwaysRunignoreMissingDependencies设置为true(它们都默认为false)将导致忽略方法依赖关系。除非您有特定的理由,否则我会避免设置alwaysRun=true