Unit testing 使用PowerMock的TestNG数据提供程序

Unit testing 使用PowerMock的TestNG数据提供程序,unit-testing,mocking,testng,powermock,Unit Testing,Mocking,Testng,Powermock,我使用Mockito和TestNG进行单元测试。我有一个静态方法要模拟,我尝试了PowerMock。不幸的是,我不能在TestNG中使用DataProvider和PowerMock 问题:在使用PowerMock时使用TestNG的数据提供程序是否有变通方法?有变通方法。参数化测试方法的所有参数必须声明为对象类型。在测试方法主体中,您需要将它们转换为实际类型 @Test(dataProvider=“data”) 使用SPowerMock(对象参数)的公共void测试方法{ mockStatic(

我使用Mockito和TestNG进行单元测试。我有一个静态方法要模拟,我尝试了PowerMock。不幸的是,我不能在TestNG中使用DataProvider和PowerMock


问题:在使用PowerMock时使用TestNG的数据提供程序是否有变通方法?

有变通方法。参数化测试方法的所有参数必须声明为对象类型。在测试方法主体中,您需要将它们转换为实际类型

@Test(dataProvider=“data”)
使用SPowerMock(对象参数)的公共void测试方法{
mockStatic(SomeClass.class);
数据类型参数=(数据类型)参数;
// ... 
}
@数据提供者
公共对象[][]数据(){
返回新对象[][]{
新对象[]{new DataType()}
};
}

有一个解决方法。参数化测试方法的所有参数必须声明为对象类型。在测试方法主体中,您需要将它们转换为实际类型

@Test(dataProvider=“data”)
使用SPowerMock(对象参数)的公共void测试方法{
mockStatic(SomeClass.class);
数据类型参数=(数据类型)参数;
// ... 
}
@数据提供者
公共对象[][]数据(){
返回新对象[][]{
新对象[]{new DataType()}
};
}

在PowerMockRunner的顶部,您可以通过PowerMockRunnerDelegate使用DataProviderRunner,并且可以隐式转换测试函数参数

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(DataProviderRunner.class)
// ...
public class Test {
// ...
}

在PowerMockRunner的顶部,您可以通过PowerMockRunnerDelegate使用DataProviderRunner,并且可以隐式转换测试函数参数

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(DataProviderRunner.class)
// ...
public class Test {
// ...
}