Используйте @DataProvider с 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)

где id и name предоставлены DataProvider, TestNG не сообщает, что DataProvider предоставляет только два параметра, а не три.

Кто-нибудь знает, как этого добиться?


person Viraj    schedule 02.09.2013    source источник
comment
Это должно работать нормально - с какой проблемой вы столкнулись?   -  person assylias    schedule 02.09.2013
comment
Проблема заключается в использовании аннотации @Mocked с параметрами @DataProvider. Для Ex public void testRemove(@Mocked Creator creator, int id, String name){. Здесь идентификатор и имя взяты из датапроайдера. Для этого Testng не проходит тест, указав, что @DataProvider не дает 3 параметра, что верно.   -  person Viraj    schedule 02.09.2013
comment
Понятно - я полагаю, вы могли бы издеваться над создателем внутри метода, например, в блоке ожиданий.   -  person assylias    schedule 02.09.2013


Ответы (3)


Ваш издевательский объект должен быть объектом тестового класса.

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
    }
}
person Vincent    schedule 30.10.2013

Вы также можете сделать следующее (я тестировал его с помощью 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
    }
}
person Tarek    schedule 17.11.2015

Вместо объявления поля класса @Mocked вы также можете объявить локальный объект @Mocked с помощью динамическое частичное имитирование.

При частичном издевательстве имитируются только методы, которые вы записываете (методы, не являющиеся явным издевательством, не будут имитироваться; они будут использовать свою реализацию по умолчанию).

person mucaho    schedule 20.02.2014