我正在为我的项目使用Testng 6.8.5和Jmockit 1.4。我想将testng @DataProvider
与带有测试参数级别的Jmockit @Mocked
注释一起使用。
@Test
public void testRemove(@Mocked Creator) throws Exception {
//Test Code
}
我想使用不同数据集的上述测试(使用@DataProvider
),但是当我将方法签名更改为:
public void testRemove(@Mocked Creator creator, int id, String name)
其中id
和name
由DataProvider提供,TestNG无法说DataProvider只提供两个参数,而不是三个。
有谁知道如何实现这个目标?
答案 0 :(得分:1)
您的模拟对象必须是测试类的字段。
public class UserTest {
@Mocked
Creator creator;
@DataProvider(name = "my data provider")
public Oject[][] dataProvider() {
//code data proviver
}
@Test(dataProvider = "my data provider")
public void testRemove(int id, String name) {
new Expectations() {{
creator.doSomething(...);
result = expectedResult;
//other expectation
}};
//other test code
}
}
答案 1 :(得分:1)
您还可以执行以下操作(我使用TestNG 6.8.21和Jmockit 1.20测试它,它正确地模拟了对象):
public class UserTest {
@DataProvider(name = "creatorProvider")
public Oject[][] dataProvider() {
return new Object[][] {{null, 1 "t1"}, {null, 2, "t2"}};
}
@Test(dataProvider = "creatorProvider")
public void testRemove(@Mocked final Creator creator, int id, String name) {
new Expectations() {{
creator.doSomething(id, name); result = expectedResult;
}};
//other test code
}
}
答案 2 :(得分:0)
您可以使用dynamic partial mocking声明本地@Mocked对象,而不是声明@Mocked类字段。
部分模拟只会模拟你记录的方法(不会模拟显式模拟的方法;它们将使用它们的默认实现)。