2013-11-10 4 views
0

Вот мой тест:JUnit модульное тестирование Исключение нулевого указателя вместо пользовательского исключения

@Test(expected = NoItemsInStockException.class) 
public void cantTakeItemIfNoneInStock() throws NoItemsInStockException { 
    User user = new User(); 
    user.setEmail("[email protected]"); 
    user.setDebt(0); 

    Item item = new Item(); 
    item.setId(1L); 
    item.setPrice(10); 
    item.setQuantity(0); 

    Mockito.when(userRepository.findByEmail(user.getEmail())).thenReturn(user); 
    Mockito.when(itemRepository.findOne(item.getId())).thenReturn(item); 

    scanService.takeItem(user.getEmail(), user.getId()); 
} 

Вот мои услуги осущ:

@Override 
@Transactional 
public void takeItem(final String userEmail, final Long itemId) throws NoItemsInStockException { 
    User user = userRepository.findByEmail(userEmail); 
    Item item = itemRepository.findOne(itemId); 

    if (item.getQuantity() <= 0) { 
     throw new NoItemsInStockException("No items left"); 
    } 

    Scan scan = new Scan(); 
    scan.setDate(new Date()); 
    scan.setUser(user); 
    scan.setItem(item); 
    scanRepository.save(scan); 

    user.setDebt(user.getDebt() + item.getPrice()); 
    item.setQuantity(item.getQuantity() - 1); 
} 

И вот мое исключение:

public class NoItemsInStockException extends Exception { 
    public NoItemsInStockException() { 
    } 

    public NoItemsInStockException(final String message) { 
     super(message); 
    } 
} 

Этот тест получает исключение NullPointerException вместо NoItemsInStockException и поэтому терпит неудачу. Я просто не могу понять, что здесь не так?

ответ

1
scanService.takeItem(user.getEmail(), user.getId()); 

Вы имеете в виду item.getId(), плюс Пользователь не имеет идентификатора.

Смежные вопросы