当前位置: 首页 > 知识库问答 >
问题:

用testng进行多线程单元测试

竺和洽
2023-03-14

我正在学习使用TestNG进行单元测试。我想将变量“val”的唯一值传递给线程池中的每个线程,但它没有接收它。

这里是testng类:

public class NewTest {

    int val = 0;

  /*@Test(dataProvider = "dp")
  public void f(Integer n, String s) {
  }*/
  @BeforeMethod
  public void beforeMethod() {
      long id = Thread.currentThread().getId();
      System.out.println("beforeMethod. Thread id is: " + id);



  }

  @AfterMethod
  public void afterMethod() {/*
      long id = Thread.currentThread().getId();
      System.out.println("After test-method. Thread id is: " + id);*/
  }


  @DataProvider
  public Object[][] dp() {
    return new Object[][] {
      new Object[] { 1, "a" },
      new Object[] { 2, "b" },
    };
  }
  @BeforeClass
  public void beforeClass() {

  }

  @AfterClass
  public void afterClass() {
  }

  @BeforeTest
  public void beforeTest() {
      val++;
  }

  @AfterTest
  public void afterTest() {
  }

  @BeforeSuite
  public void beforeSuite() {
  }

  @AfterSuite
  public void afterSuite() {
  }

  @Test(threadPoolSize = 5, invocationCount = 5, timeOut = 1000)
  public void methodOne(){
      System.out.println("Value of val from MethodOne::"+val);
  }
}

和输出:

[ThreadUtil]启动执行器超时:1000msworkers:5ThreadPoolSize:5BeForeMethod。线程id为:15 BeforeMethod。线程id为:12 BeforeMethod。线程id为:14 BeforeMethod。线程id为:13 BeforeMethod。线程id为:16 val from methodOne::1 val from methodOne::1 val from methodOne:1 val from methodOne:1 val from methodOne:1 val from methodOne:1 val from methodOne:1 val from methodOne:1 val from methodOne:1 val from methodOne:1

共有1个答案

白浩荡
2023-03-14

请小心:@beforeTest不是@beforeMethod(@beforeSuite->@beforeTest->@beforeClass->@beforeMethod

然后,@beforeTest只被 调用一次:在您的示例中,只调用一次,val总是1。

 类似资料:
  • 我试图创建一起使用JBehave和TestNG的概念验证。我想做的是在多个线程中同时运行一个故事,以测试我的代码的线程安全性。 我有一个简单的类,它只做一件事,在给定的整数值上计算模7。我已经为这个类创建了一个简单的BDD测试。我已经按照JBehave“入门”文档中的描述设置了BDD测试。唯一的区别是,在我的JUnitStory文件中,我没有使用JUnit的@Test注释,而是使用了TestNG的

  • 问题内容: 我正在使用TestNG使用AbstractTransactionalTestNGSpringContextTests作为基类来测试持久性Spring模块(JPA + Hibernate)。@ Autowired,@ TransactionConfiguration,@ Transactional的所有重要部分都可以正常工作。 当我尝试在带有threadPoolSize = x,invo

  • 问题内容: 摘要: 当在线程中引发断言错误时,单元测试不会消失。这是有道理的,因为不应允许一个线程使另一线程崩溃。问题是我该如何1)当第一个帮助程序线程崩溃时使整个测试失败,或者2)遍历并确定每个线程完成后的状态(请参见下面的代码)。后者的一种方法是通过每个线程具有状态变量,例如“ boolean [] statuss”,并具有“ statuses [i] == false”表示线程失败(可以扩展

  • 我有一个java maven项目,我希望使用多线程进行测试。我在src/test中有testng.xml,maven surefire插件被配置为使用它。就像这个页面一样:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 编辑:增加了一定的pom条目

  • 使用 GWT 更轻松地测试异步应用程序 您可能从编写 Ajax 应用程序中获得了极大乐趣,但是对它们执行单元测试却着实让人头痛。 在本文中,Andrew Glover 着手解决 Ajax 的弱点(其中之一),即应对异步 Web 应用程序执行单元测试的固有挑战。 幸运的是,他发现在 Google Web Toolkit 的帮助下,解决这个特殊的代码质量问题要比预想的容易。 Ajax 在近期无疑是 W

  • 问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插