我们如何为 java8 函数、谓词、双函数做 junit



我正在尝试将我的应用程序从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 模拟它们。

相关内容

  • 没有找到相关文章

最新更新