如何调试使用数据提供者的testng测试?

问题描述 投票:0回答:1

我有一个testng测试方法,该方法使用dataprovider获取测试输入。我只想在针对第二个测试数据输入运行测试时调试测试。我怎么做 ?我应该如何设置断点?

这里是一些示例代码。

@Test(dataProvider = "myDataProvider")
public void findStringInString(String input, String toFind, boolean found){
    Assert.assertEquals(finder(input, toFind), found, "Could not find " + toFind + " in " + input);
}

@DataProvider(name = "myDataProvider")
public static Object[][] stringSource()
{
    return new Object[][] {
        {"hello", "hell", true},
        {"nice", "iced", false},
        {etc...}
    };
}

PS-顺便说一句,此代码看起来像是反模式还是不良做法?

java testng
1个回答
1
投票

确定调试点的最简单方法是维护一个计数器,该计数器检查正在运行哪个数据提供程序迭代,然后在该值达到所需值时,执行调试打印语句并在该行中设置断点。

这里是一个样本

import java.util.concurrent.atomic.AtomicInteger;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class SampleTestCase {

  private final AtomicInteger counter = new AtomicInteger(1);

  @Test(dataProvider = "getData")
  public void testMethod(String s) {
    if (counter.getAndIncrement() == 2) {
      System.err.println("Debug mode on"); //Set a breakpoint on this line
    }
    System.err.println("Hello " + s);

  }

  @DataProvider
  public Object[][] getData() {
    return new Object[][]{
        {"TestNG"},{"Spring"},{"Selenium"}
    };
  }

}

顺便说一句,此代码看起来像是反模式还是不良做法?

我认为仅查看框架代码并不能说很多。您共享的样本中几乎没有什么可以用来建议的。

© www.soinside.com 2019 - 2024. All rights reserved.