【发布时间】:2019-11-03 16:35:07
【问题描述】:
我一直在尝试从 CrudRepository 测试 findById() 方法。
这个方法返回一个Optional,我不知道如何返回它,
现在它给了我一个NullPointerException。
我的测试代码如下:
@RunWith(MockitoJUnitRunner.class)
public class DishServiceMockTest {
private static final String DISH_NAME = "Kaas";
private static final String DISH_TYPE = "Voorgerecht";
private static final Long DISH_ID = 23L;
//Mock the service dependencies(=DishServiceImpl is dependent on dishRepo)
@Mock
DishRepository dishRepository;
//Mock the service which is to be tested (Can't be a interface)
@InjectMocks
DishServiceImpl dishService;
@Test
public void findById(){
//Arange
Dish dish = createDish(DISH_ID, DISH_NAME, DISH_TYPE);
Mockito.when(dishRepository.findById(DISH_ID)).thenReturn(Optional.of(dish));
assertThat(dishService.findById(DISH_ID)).isEqualTo(dish);
}
运行测试给了我 2 个错误,其中一个是 NullPointerException,第二个是:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at avans.ivh11.proftaak.mocks.DishServiceMockTest.findById(DishServiceMockTest.java:85)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, which is not supported
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
NPE
java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at avans.ivh11.proftaak.mocks.DishServiceMockTest.findById(DishServiceMockTest.java:85)
比较失败
org.junit.ComparisonFailure:
Expected :avans.ivh11.proftaak.Domain.Dish@17
Actual :Optional[avans.ivh11.proftaak.Domain.Dish@17]
【问题讨论】:
-
为什么选择 NPE?它在哪里?代码接缝对我来说是合法的。
-
我添加了 NPE 错误代码
-
您确定您输入到
Optional.of()中的dish不为空吗? -
我的 createDish() 方法中有一个 discService.save() 方法。制作一个新的 Dish 手动修复了 NPE,但现在它给了我一个 ComparisionFailure,我将它添加到我的原始帖子中。编辑:添加 isEqualTo(Optional.of(dish));修复。感谢您的帮助!
-
NPE 自己说 - 菜是空的。
标签: java spring-boot spring-mvc junit mockito