最近在做自动化测试项目。项目用到了TestNG、SpringBoot等框架。
在无意中发现,在@Test(description = "case1", timeOut = 180000)注解后,TestNG的Assert断言异常无法抛出。
先来看一下代码:
package com.woodpecker.testcase.demo;
import com.woodpecker.WoodpeckerApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;/** * 类描述:〈〉 * * @author: jinjianxu * @since: 1.0 */
@SpringBootTest(classes = {WoodpeckerApplication.class})
public class D extends AbstractTestNGSpringContextTests {
@Test(description = "case1", timeOut = 180000)
public void test() {
System.out.println("begin");
Assert.assertEquals("1", "2", "断言1和2相等");
System.out.println("end");
}
}
我在用例上加了timeOut = 180000,用于控制用例执行最大时间,防止case长时间卡住。咋们来运行一下这个代码,截图如下:
![6017e46f7e99015d501d636ecc05cfdd.png](https://i-blog.csdnimg.cn/blog_migrate/3b0a1bbbf86f3221d1b9e9277041b7a4.jpeg)
什么情况?断言失败的异常呢?
不懂了。
接下去我把用例的timeOut = 180000去掉,代码如下:
package com.woodpecker.testcase.demo;
import com.woodpecker.WoodpeckerApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;/** * 类描述:〈〉 * * @author: jinjianxu * @since: 1.0 */
@SpringBootTest(classes = {WoodpeckerApplication.class})
public class D extends AbstractTestNGSpringContextTests {
// @Test(description = "case1", timeOut = 180000)
@Test(description = "case1")
public void test() {
System.out.println("begin");
Assert.assertEquals("1", "2", "断言1和2相等");
System.out.println("end");
}
}
我把timeOut注释掉了。
运行一下,结果如下:
![c82c7ca11451221ed792dccf9db1dc9d.png](https://i-blog.csdnimg.cn/blog_migrate/fa63dbb5ad444e154c44779e449fb5ec.jpeg)
咦,断言失败异常抛出来了。
什么鬼!
莫非是SpringBoot或者TestNG的 BUG?
求各位大神指导一下,万分感谢!
进一步发现,不管是任何异常,都不会被抛出。
代码如下:
![951347ed52feb41a7f5cfc432f7984ef.png](https://i-blog.csdnimg.cn/blog_migrate/79b32fd8ecbd3aba5c2d150e1191ef52.jpeg)
运行代码,结果如下:
![6e23e479955939fc951593c7f00a5806.png](https://i-blog.csdnimg.cn/blog_migrate/c1245866c2865c64c202fe26c132bc7f.jpeg)
你看,我手动抛出
throw new RuntimeException("断言1和2相等");
都没异常抛出来,被捕获掉了。
一切的问题,都在于 @Test(description = "case1", timeOut = 180000) 这个代码,设置了 timeOut 就会出现这个问题,去掉 timeOut 就没问题。可以正常抛出异常。
但是我用例,需要设置超时时间。