将@DataProvider与Jmockit一起使用

时间:2013-09-02 10:18:37

标签: java testng jmockit

我正在为我的项目使用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)

其中idname由DataProvider提供,TestNG无法说DataProvider只提供两个参数,而不是三个。

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

3 个答案:

答案 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类字段。

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