我们如何为Java8 Function,Predicate,Bifunction做junit

时间:2019-04-29 00:00:21

标签: lambda junit java-8 stream mockito

我试图将我的应用程序从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接口的方法,性能也会更好吗?

预先感谢!

1 个答案:

答案 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模拟它们。