Как мы делаем junit для функции java8, предиката, бифункции - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь перенести свое приложение в java 8 из java 7 и пытаюсь использовать краткость, обеспечиваемую использованием java 8 lambdas.но юнит-тестирование стало для меня кошмаром, поскольку я не могу ссылаться на функцию / предикат из класса тестирования.У меня есть следующие вопросы:

Мой предыдущий код:

public String myMethod(int v1){
     //Some logic
}

Использование java8:

Fucntion<Integer,String> myMethod = (i) -> {
    //Same some logic
};

Итак, юнит-тестирование стало для меня ночным делом в вышеприведенном случае.Я использую Junit, Mockito для модульного тестирования.

TestClass:

@RunWith(JunitMockitoRunner.class)
public class TestClass{
    @InjectMock
    Testclass mock;

// want to test my method which i am trying to write using Fucntion<I,O>

}

Также будет ли производительность лучше, если я пойду с java7 способом, имеющим метод вместо лямбда или функционального интерфейса?

Заранее спасибо!

1 Ответ

0 голосов
/ 29 апреля 2019

Если и метод, и функция определены в одной и той же области, то я не вижу большой разницы в их тестировании.Если myMethod определена как переменная экземпляра, вы можете просто вызвать ее и подтвердить результат следующим образом:

class ClassUnderTest {
    Fucntion<Integer,String> myMethod = (i) -> {
        //Same some logic
    };
}

class ClassUnderTestTest {
    ClassUnderTest classUnderTest = // instantiate object
    String actualResult = classUnderTest.myMethod(1);

    assertEquals(expectedResult, actualResult);
}

Если у ClassUnderTest есть некоторые другие свойства, от которых зависит myMethod, вы можете имитироватьони используют Mockito.

...