我想在 toEntity 函数上使用Mockito执行junit测试 .
@Component
public class MyEntityTransform {
public Function<MyDTO , MyEntity> toEntity = new Function<MyDTO , MyEntity >() {
@Override
public MyEntity apply(MyDTO record) {
return new MyEntity();
}
};
}
不幸的是,当我模拟类时, toEntity 是NULL,我不知道如何正确测试它 .
@RunWith(MockitoJUnitRunner.class)
public class MyTest {
@InjectMocks
private MyService _classUnderTest;
@Mock
private MyEntityTransform myEntityTransform
@Before
public void setUp() {
Mockito.when(this.myEntityTransform.toEntity.apply(Mockito.anyObject())).thenReturn(...);
}
}
当我运行JUNIT测试时,Mockito给我错误:
java.lang.NullPointerException org.mockito.exceptions.misusing.InvalidUseOfMatchersException:此处检测到错位的参数匹配器: - > at com.example.MyTest.setUp(MyTest.java:38)您不能在验证或存根之外使用参数匹配器 . 正确使用参数匹配器的示例:when(mock.get(anyInt())) . thenReturn(null); doThrow(new RuntimeException()) . when(mock).someVoidMethod(anyObject()); verify(mock).someMethod(contains(“foo”))此外,此错误可能会显示,因为您使用参数匹配器与无法模拟的方法 . 以下方法无法进行存根/验证:final / private / equals()/ hashCode() . 不支持在非公共父类上声明的模拟方法 .
你有什么建议吗?
1 回答
你正在使用公共领域,这不是一个好主意 . 但无论如何,你想要模拟的是函数,而不是MyEntityTransform的实例 . 所以你需要类似的东西
但坦率地说,我不会使用Function类型的公共字段 . 相反,我会使用一个公共方法:
然后你可以模拟MyEntityTransform并使其toEntity方法返回你想要的 . 如果您需要传递一个函数来执行该方法的操作,请使用方法引用: