我试图将我的应用程序从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进行单元测试。
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的方法而不是lambda或fucntional接口的方法,性能也会更好吗?
预先感谢!
答案 0 :(得分:0)
如果方法和函数都在相同的范围内定义,那么在测试它们方面我看不出太大的区别。
如果将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模拟它们。