Testng异常显示循环依赖关系,请说明
package test.depends;
import org.testng.annotations.Test
public class SimpleDependencyTes {
@Test
public void testOne() {
System.out.println("The first method");
}
@Test(dependsOnMethods= {"testOne","testTwo"})
public void testTwo() {
System.out.println("The Second method");
}
}
错误如下:
org.testng.TestNGException: The following methods have cyclic dependencies:SimpleDependencyTes.testTwo()[pri:0, instance:test.depends.SimpleDependencyTes@1774679]
at org.testng.internal.Graph.topologicalSort(Graph.java:149)
at org.testng.internal.MethodHelper.topologicalSort(MethodHelper.java:261)
at org.testng.internal.MethodHelper.sortMethods(MethodHelper.java:317)
at org.testng.internal.MethodHelper.collectAndOrderMethods(MethodHelper.java:64)
at org.testng.TestRunner.initMethods(TestRunner.java:438)
at org.testng.TestRunner.init(TestRunner.java:271)
at org.testng.TestRunner.init(TestRunner.java:241)
at org.testng.TestRunner.<init>(TestRunner.java:192)
at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:713)
at org.testng.SuiteRunner.init(SuiteRunner.java:260)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:198)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1295)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1273)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
答案 0 :(得分:1)
您的testTwo
将其自身列为依赖项:
@Test(dependsOnMethods= {"testOne","testTwo"})
public void testTwo() {
按定义dependsOnMethods
表示
(testTwo)仅在成功执行所有依赖的测试之后才开始执行
(source)。因此,如果您按照上面的引用设置了testTwo,则是说testTwo在成功执行testTwo之后才能启动。这是不可能的。相反,您可能只想让testTwo
依赖于testOne
:
@Test(dependsOnMethods= {"testOne"})
public void testTwo() {
和其他一些testThree可以同时依赖于两者:
@Test(dependsOnMethods= {"testOne","testTwo"})
public void testThree() {
答案 1 :(得分:0)
Circular dependency是两个或多个模块之间的关系,这些模块直接或间接依赖于彼此才能正常运行。这样的模块也称为mutually recursive。
循环依赖可能在以下两种情况下发生:
testOne()
引用了另一种方法testTwo()
,同时testTwo()
试图引用testOne()
。testTwo()
试图引用自身,即testTwo()
。在这里您可以找到有关What is a circular dependency and how can I solve it?的详细讨论
dependsOnMethods用于创建此方法所依赖的方法的 List 。
有两种依赖关系:
软件依赖项:即使某些方法失败,该方法也始终在您依赖的方法之后运行。当您只想确保测试方法以特定顺序运行但它们的成功并不真正取决于其他方法的成功时,这将非常有用。通过在您的"alwaysRun=true"
批注中添加@Test
获得软依赖性。
一个例子:
@Test
public void initial_test_method() {}
@Test(dependsOnMethods = { "serverStartedOk" })
public void test_method1() {}
在此示例中,test_method1()
被声明为依赖于方法initial_test_method()
,这保证了initial_test_method()
将始终首先被调用。
在您的程序中,@Test
的{{1}}注释包含testTwo()
(本身)作为 dependsOnMethods 之一。因此,您会看到错误。
如果从 dependsOnMethods 的 List 中删除方法testTwo()
,则您的程序将是完美的。
testTwo()
答案 2 :(得分:-1)
您已经定义了对两种方法的依赖关系:testOne和testTwo,其中testTwo本身,但这并不意味着。您不能在方法本身上定义依赖关系。您可以定义对任何其他方法的依赖。因此,您需要删除testTwo依赖性。
@Test(dependsOnMethods= {"testOne"})
public void testTwo() {
System.out.println("The Second method");
}
您可以为任何第三个@Test方法定义这两个依赖关系,例如:
@Test(dependsOnMethods= {"testOne","testTwo"})
public void testThree() {
System.out.println("The third method");
}