我正在尝试将我的应用程序从java 7迁移到java 8,并尝试利用使用java 8 lambda提供的简洁性。 但是单元测试对我来说成了一场噩梦,因为我无法从测试类中引用函数/谓词。我有以下问题:
我以前的代码:
public String myMethod(int v1){
//Some logic
}
Usign java8:
Fucntion<Integer,String> myMethod = (i) -> {
//Same some logic
};
所以在上述情况下,单元测试对我来说是一个夜晚。我正在使用Junit,Mockito进行单元测试。
测试类:
@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 方式使用一种方法而不是 lambda 或功能接口,性能会更好吗?
提前感谢!
如果方法和函数都在同一范围内定义,那么我认为测试它们没有太大区别。如果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 模拟它们。