簡體   English   中英

使用 Mockito 運行服務測試時出現 NullPointerException

[英]NullPointerException when running Service Test with Mockito

這是我的測試 class,我在其中創建了MockBean ,並將其注入服務 object:

@ExtendWith(MockitoExtension.class)
@ExtendWith(SpringExtension.class)
public class CategoryServiceTest {

    @MockBean
    private CategoryRepository categoryRepository;

    @InjectMocks
    private CategoryServiceImpl categoryService;


    @Test
    public void testCheckUniqueInNewModeReturnDuplicateName() {
        Long categoryId = null;
        String name = "Computers";
        String alias = "abc";

        Category category = new Category(categoryId, name, alias);

        Mockito.when(categoryRepository.findByName(name)).thenReturn(category);

        String result = categoryService.checkUnique(categoryId, name, alias);

        assertThat(result).isEqualTo("DuplicateName");
    }
}

當我嘗試運行此測試時,出現 NullPointerException:

java.lang.NullPointerException: Cannot invoke "com.marketcruiser.admin.category.CategoryRepository.findByName(String)" because "this.categoryRepository" is null

    at com.marketcruiser.admin.category.CategoryServiceImpl.checkUnique(CategoryServiceImpl.java:136)

這是我的服務 class,方法是checkUnique

@Service
public class CategoryServiceImpl implements CategoryService{

    private final CategoryRepository categoryRepository;


    @Autowired
    public CategoryServiceImpl(CategoryRepository categoryRepository) {
        this.categoryRepository = categoryRepository;
    }

    @Override
    public String checkUnique(Long categoryId, String name, String alias) {
        boolean isCreatingNew = (categoryId == null || categoryId == 0);

        Category categoryByName = categoryRepository.findByName(name);

        if (isCreatingNew) {
            if (categoryByName != null) {
                return "DuplicateName";
            }
        }

        return "OK";
    }
}

有人注意到錯誤是什么嗎?

您正在混合兩個不兼容的框架:Spring 和 Mockito。選擇其中一個,但不能同時選擇兩個。 這是僅使用 Mockito 的測試:

@ExtendWith(MockitoExtension.class)
public class CategoryServiceTest {

    @Mock
    private CategoryRepository categoryRepository;

    @InjectMocks
    private Cate

請注意只有一個擴展名和@Mock而不是@MockBean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM