2

我正在为我的项目使用 Testng 6.8.5 和 Jmockit 1.4。我想使用带有测试参数级别@DataProvider的 Jmockit注释的 testng。@Mocked

@Test
public void testRemove(@Mocked Creator) throws Exception {
   //Test Code
}

我想将上述测试与不同的数据集(使用@DataProvider)一起使用,但是当我将方法签名更改为:

public void testRemove(@Mocked Creator creator, int id, String name)

在哪里idname由 DataProvider 提供,TestNG 失败说 DataProvider 只提供两个参数,而不是三个。

有谁知道如何实现这一目标?

4

3 回答 3

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
    }
}
于 2013-10-30T12:12:02.297 回答
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
    }
}
于 2015-11-17T18:58:10.070 回答
0

除了声明 @Mocked 类字段,您还可以声明具有动态部分模拟的本地 @Mocked 对象。

部分模拟仅模拟您记录的方法(不会模拟未显式模拟的方法;它们将使用其默认实现)。

于 2014-02-20T22:19:37.753 回答